zookeeper不适合大批量的频繁写入操作。
Kafka 1.0.2将consumer的位移信息保存在Kafka内部的topic中,即__consumer_offsets主题,并
且默认提供了kafka_consumer_groups.sh脚本供用户查看consumer信息
kafka-topics.sh --zookeeper node1:2181/myKafka --create --topic tp_test_01 --partitions 5 --replication-factor 1
for i in `seq 100`; do echo "hello lagou $i" >> messages.txt; done
kafka-console-producer.sh --broker-list node1:9092 --topic tp_test_01 < messages.txt
由于默认没有指定key,所以根据round-robin方式,消息分布到不同的分区上。 (本例中生产了100条消息)
kafka-console-producer.sh --broker-list node1:9092 --topic tp_test_01 < messages.txt
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>[root@node1 ~]# kafka-run-class.sh
kafka.tools.GetOffsetShell --broker-list node1:9092 --topic tp_test_01 --time
-1
tp_test_01:2:20
tp_test_01:4:20
tp_test_01:1:20
tp_test_01:3:20
tp_test_01:0:20
结果输出表明100条消息全部生产成功!
kafka-console-consumer.sh --bootstrap-server node1:9092 --topic tp_test_01 --from-beginning
kafka-consumer-groups.sh --bootstrap-server node1:9092 --list
输出: console-consumer-49366 (记住这个id!)
注意:运行下面命令前先要在consumer.properties中设置exclude.internal.topics=false
kafka-console-consumer.sh --topic __consumer_offsets --bootstrap-server node1:9092 --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter" --
consumer.config config/consumer.properties --from-beginning
默认情况下__consumer_offsets有50个分区,如果你的系统中consumer group也很多的话,那么这个命令的输出结果会很多
这时候就用到了第5步获取的group.id(本例中是console-consumer-49366)。Kafka会使用下面公式
计算该group位移保存在__consumer_offsets的哪个分区上:
Math.abs(groupID.hashCode()) % numPartitions
对应的分区=Math.abs(“console-consumer-49366”.hashCode()) % 50 = 19,即
__consumer_offsets的分区19保存了这个consumer group的位移信
kafka-simple-consumer-shell.sh --topic __consumer_offsets --partition 19 --broker-list node1:9092 --formatter "kafka.coordinator.group.GroupMetadataManager\$OffsetsMessageFormatter"
该consumer group果然保存在分区11上,且位移信息都是对的(这里的位移信息是已消
费的位移,严格来说不是第3步中的位移。由于我的consumer已经消费完了所有的消息,所以这里的位
移与第3步中的位移相同)。另外,可以看到__consumer_offsets topic的每一日志项的格式都是:
[Group, Topic, Partition]::[OffsetMetadata[Offset, Metadata], CommitTime, Exp