ConsumerConfig.scala 储存Consumer的配置

按照我的理解,0.10的Kafka没有专门的SimpleConsumer,仍然是沿用0.8版本的。

1.从poll开始

消费的规则如下:

  • 一个partition只能被同一个ConsumersGroup的一个线程所消费.

  • 线程数小于partition数,某些线程会消费多个partition.

  • 线程数等于partition数,一个线程正好消费一个线程.

  • 当添加消费者线程时,会触发rebalance,partition的分配发送变化.

  • 同一个partition的offset保证消费有序,不同的partition消费不保证顺序.

Consumers编程的用法:

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

consumer,是一个纯粹的单线程程序,后面所讲的所有机制(包括coordinator,rebalance, heartbeat等),都是在这个单线程的poll函数里面完成的。也因此,在consumer的代码内部,没有锁的出现。