ConsumerConfig.scala 儲(chǔ)存Consumer的配置

按照我的理解,0.10的Kafka沒(méi)有專門的SimpleConsumer,仍然是沿用0.8版本的。

1.從poll開(kāi)始

消費(fèi)的規(guī)則如下:

  • 一個(gè)partition只能被同一個(gè)ConsumersGroup的一個(gè)線程所消費(fèi).

  • 線程數(shù)小于partition數(shù),某些線程會(huì)消費(fèi)多個(gè)partition.

  • 線程數(shù)等于partition數(shù),一個(gè)線程正好消費(fèi)一個(gè)線程.

  • 當(dāng)添加消費(fèi)者線程時(shí),會(huì)觸發(fā)rebalance,partition的分配發(fā)送變化.

  • 同一個(gè)partition的offset保證消費(fèi)有序,不同的partition消費(fèi)不保證順序.

Consumers編程的用法:

private final KafkaConsumer<Long, String> consumer; // 與Kafka進(jìn)行通信的consumer...
consumer = new KafkaConsumer<Long, String>(props);
consumer.subscribe(Collections.singletonList(this.topic));
ConsumerRecords<Long, String> records = consumer.poll(512);
...

consumer,是一個(gè)純粹的單線程程序,后面所講的所有機(jī)制(包括coordinator,rebalance, heartbeat等),都是在這個(gè)單線程的poll函數(shù)里面完成的。也因此,在consumer的代碼內(nèi)部,沒(méi)有鎖的出現(xiàn)。