how do i choose publish ID, when placing new publish, ex:

$post = array(
'ID'                =>  3333,
'comment_status'            =>  'open',
'post_content'      =>  'hi world!',
'post_name'         =>  'title_1',
'post_status'       =>  'publish',
'post_title'        =>  'sdfsfd fdsfds ds',
'post_type'         =>  'post',

$post_id = wp_insert_post($post);

wish to place new publish with id = 3333

Sorry buddy, not possible. Here's what the devs say in the codex:

IMPORTANT: Setting something for $publish['ID'] Won't produce a publish with this ID number. Setting this value may cause the function to update the publish with this ID number using the other values specified by $publish. In a nutshell, to place a brand new publish, $publish['ID'] should be blank or otherwise set whatsoever.

You'll be able to do that, simply not using the API's place function. You are able to write your personal Place query rather. You usually desire to use the API when you are able, but sometimes it isn't possible. The query would seem like this:

global $wpdb;
$wpdb->query( $wpdb->prepare("
    INSERT INTO {$wpdb->posts}
    VALUES( %d, %d, NOW(), %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, NOW(), %s, %s, %d, %s, %d, %s, %s, %d )",
) );

You will need to make certain the ID does not already appear in the database first. When the publish table schema changes later on you may want to update the query to take into account the alterations.

Thought you may want to know you should use 'import_id' rather than 'ID' and it'll "try" and employ that.

Begin to see the second exmaple here: