Kafka多维度系统精讲-从入门到熟练掌握 Producer异步 详解代码案例笔记

102 阅读1分钟

1、Producer异步阻塞发送(同步)

/**
 * Producer异步阻塞发送
 */
public static void producerSyncSend() throws ExecutionException, InterruptedException {

    Properties
properties = new Properties();

    properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
    properties.put(ProducerConfig.ACKS_CONFIG,"all");
    properties.put(ProducerConfig.RETRIES_CONFIG,"0");
    properties.put(ProducerConfig.BATCH_SIZE_CONFIG,"16384");
    properties.put(ProducerConfig.LINGER_MS_CONFIG,"1");
    properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG,"33554432");

   
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
    properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");

    // Producer的主对象
    Producer<String,String> producer = new KafkaProducer<>(properties);

    // 消息对象 - ProducerRecoder
    for(int i=0;i<10 ;i++){
        String
key = "key-"+i;
        ProducerRecord<String,String> record =
                new ProducerRecord<>(TOPIC_NAME,key,"value-"+i);

        Future<RecordMetadata> send = producer.send(record);
        RecordMetadata
recordMetadata = send.get();
        System.out.println(key + "partition
: "+recordMetadata.partition()+" , offset : "+recordMetadata.offset());
    }

    // 所有的通道打开都需要关闭
    producer.close();
}



2、Producer异步非阻塞发送(异步发送)

/**
 * Producer异步非阻塞发送演示
 */
public
static void producerSend(){
    Properties
properties = new Properties();
    properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
    properties.put(ProducerConfig.ACKS_CONFIG,"all");
    properties.put(ProducerConfig.RETRIES_CONFIG,"0");
    properties.put(ProducerConfig.BATCH_SIZE_CONFIG,"16384");
    properties.put(ProducerConfig.LINGER_MS_CONFIG,"1");
    properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG,"33554432");

    properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
    properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");

    // Producer的主对象
    Producer<String,String> producer = new KafkaProducer<>(properties);

    // 消息对象 -
ProducerRecoder
    for(int i=0;i<10;i++){
        ProducerRecord<String,String> record =
                new ProducerRecord<>(TOPIC_NAME,"key-"+i,"value-"+i);

        producer.send(record);
    }

    // 所有的通道打开都需要关闭
    producer.close();
}

3、Producer异步非阻塞发送带回调函数callback

/**
 * Producer异步发送带回调函数
 */
public static void producerSendWithCallback(){
    Properties
properties = new Properties();
    properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localhost:9092");
    properties.put(ProducerConfig.ACKS_CONFIG,"all");
    properties.put(ProducerConfig.RETRIES_CONFIG,"0");
    properties.put(ProducerConfig.BATCH_SIZE_CONFIG,"16384");
    properties.put(ProducerConfig.LINGER_MS_CONFIG,"1");
    properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG,"33554432");

    properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
    properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");

    // Producer的主对象
    Producer<String,String> producer = new KafkaProducer<>(properties);

    // 消息对象 - ProducerRecoder
    for(int i=0;i<10;i++){
        ProducerRecord<String,String> record =
                new ProducerRecord<>(TOPIC_NAME,"key-"+i,"value-"+i);

        producer.send(record, new Callback() {
            @Override
            public void onCompletion(RecordMetadata
recordMetadata, Exception e) {
                System.out.println(
                        "partition : "+recordMetadata.partition()+" , offset : "+recordMetadata.offset());
            }
        });
    }

    // 所有的通道打开都需要关闭
    producer.close();
}

4、Producer异步非阻塞发送带回调函数和Partition负载均衡

/**
 * Producer异步发送带回调函数和Partition负载均衡
 */
public static void producerSendWithCallbackAndPartition(){
    Properties
properties = new Properties();
    properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"localshost:9092");
    properties.put(ProducerConfig.ACKS_CONFIG,"all");
    properties.put(ProducerConfig.RETRIES_CONFIG,"0");
    properties.put(ProducerConfig.BATCH_SIZE_CONFIG,"16384");
    properties.put(ProducerConfig.LINGER_MS_CONFIG,"1");
    properties.put(ProducerConfig.BUFFER_MEMORY_CONFIG,"33554432");

    properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
    properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,"org.apache.kafka.common.serialization.StringSerializer");
    properties.put(ProducerConfig.PARTITIONER_CLASS_CONFIG," com.imooc.kafka.producer.SamplePartition

");

    // Producer的主对象
    Producer<String,String> producer = new KafkaProducer<>(properties);

    // 消息对象 - ProducerRecoder
    for(int i=0;i<10;i++){
        ProducerRecord<String,String> record =
                new ProducerRecord<>(TOPIC_NAME,"key-"+i,"value-"+i);

        producer.send(record, new Callback() {
            @Override
            public void onCompletion(RecordMetadata
recordMetadata, Exception e) {
                System.out.println(
                        "partition : "+recordMetadata.partition()+" , offset : "+recordMetadata.offset());
            }
        });
    }

    // 所有的通道打开都需要关闭
    producer.close();
}

视频下载地址: 

 链接:share.weiyun.com/hPxQDszj 密码:i6qver 

 链接:share.weiyun.com/hPxQDszj 密码:7sqheg

失效++\/:cowcow2100