1. 同步发送的意思就是,一条消息发送之后,会阻塞当前线程,直至返回ack。<br />由于send方法返回的是一个Future对象,根据Futrue对象的特点,我们也可以实现同步发送的效果,只需在调用Future对象的get方发即可。
    1. package com.producer;
    2. import org.apache.kafka.clients.producer.KafkaProducer;
    3. import org.apache.kafka.clients.producer.Producer;
    4. import org.apache.kafka.clients.producer.ProducerRecord;
    5. import java.util.Properties;
    6. import java.util.concurrent.ExecutionException;
    7. public class CustomProducer3 {
    8. public static void main(String[] args) throws ExecutionException, InterruptedException {
    9. Properties props = new Properties();
    10. props.put("bootstrap.servers", "zjj101:9092");//kafka集群,broker-list
    11. props.put("acks", "all");
    12. props.put("retries", 1);//重试次数
    13. props.put("batch.size", 16384);//批次大小
    14. props.put("linger.ms", 1);//等待时间
    15. props.put("buffer.memory", 33554432);//RecordAccumulator缓冲区大小
    16. props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    17. props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
    18. Producer<String, String> producer = new KafkaProducer<>(props);
    19. for (int i = 0; i < 100; i++) {
    20. //调用了get方法,就相当于同步了,这样就是发送一条等一条的结果,就是同步了
    21. RecordMetadata first = producer.send(new ProducerRecord<String, String>("first",
    22. Integer.toString(i), Integer.toString(i))).get();
    23. System.out.println(first);
    24. }
    25. producer.close();
    26. }
    27. }