Kafka API 同步發送

Kafka API 同步發送

同步發送

同步發送的意思就是,一條消息發送之後,會阻塞當前線程,直至返回ack。
由於send方法返回的是一個Future對象,根據Futrue對象的特點,我們也可以實現同步發送的效果,只需在調用Future對象的get方發即可。
  1. 啓動zookeeper和Kafka服務
============= hadoop141 jps =============
3218 Jps
2538 QuorumPeerMain
3180 Kafka
============= hadoop142 jps =============
3184 Jps
3094 Kafka
2490 QuorumPeerMain
============= hadoop143 jps =============
3193 Jps
3100 Kafka
2492 QuorumPeerMain
  1. 編寫測試代碼
package codes.coffeecode.kafka.producer;

import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.Producer;
import org.apache.kafka.clients.producer.ProducerConfig;
import org.apache.kafka.clients.producer.ProducerRecord;

import java.util.Properties;
import java.util.concurrent.ExecutionException;

/**
 * 同步發送API
 * 同步發送的意思就是,一條消息發送之後,會阻塞當前線程,直至返回ack。
 * 由於send方法返回的是一個Future對象,根據Futrue對象的特點,我們也可以實現同步發送的效果,只需在調用Future對象的get方發即可。
 */
public class SyncCustomProducer {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        //1. 創建Kafka生產者的配置信息
        Properties properties = new Properties();

        //2. 指定連接的Kafka集羣  broker-list
        //ProducerConfig.BOOTSTRAP_SERVERS_CONFIG -- "bootstrap.servers"
        properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"hadoop141:9092");

        //3. ACK應答級別
        //ProducerConfig.ACKS_CONFIG -- "acks"
        properties.put(ProducerConfig.ACKS_CONFIG,"all");

        //4. 重試次數
        //ProducerConfig.RETRIES_CONFIG -- "retries"
        properties.put(ProducerConfig.RETRIES_CONFIG,1);

        //5. 批次大小 16k
        properties.put("batch.size",16384);

        //6. 等待時間 1ms
        properties.put("linger.ms",1);

        //7. Record Accumulator 緩衝區大小 32M
        properties.put("buffer.memory", 33554432);

        //8. key、value的序列化類
        properties.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        properties.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");

        //9. 創建生產者對象
        Producer<String,String> producer = new KafkaProducer<String, String>(properties);

        //10. 發送數據
        for (int i = 0; i < 10 ; i++){
            producer.send(new ProducerRecord<String, String>("bigdata","CustomProducer--"+i)).get();
        }

        //11. 關閉資源
        producer.close();


    }
}
  1. 啓動bigdata消費者
[root@hadoop141 kafka]# bin/kafka-console-consumer.sh --bootstrap-server hadoop141:9092 --from-beginning --topic bigdata
  1. 運行程序
    消費者顯示結果:
CustomProducer--0
CustomProducer--1
CustomProducer--2
CustomProducer--3
CustomProducer--4
CustomProducer--5
CustomProducer--6
CustomProducer--7
CustomProducer--8
CustomProducer--9

查看更多:http://www.coffeecode.codes/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章