kafka(4)分区消费模型和组消费模型

分区消费模型

kafka(4)分区消费模型和组消费模型

描述代码

main()
获取分区的size
for index =0 to size
create thread(or process) consumer(Index)


第index个线程(进程)
consumer(index)
创建到kafka broker的连接: KafkaClient(host,port)
指定消费参数构建consumer: SimpleConsumer(topic, partitions)
设置消费offset : consumer.seek(offset,0)
while True
消费指定topic第index个分区的数据
处理
记录当前消息offset
提交当前offset(可选)

组消费模型

kafka(4)分区消费模型和组消费模型

代码描述

main()
设置需要创建的流数N
for index =0 to N
create thread consumer(Index)

第index个线程
consumer(index)
创建到kafka broker的连接: KafkaClient(host,port)
指定消费参数构建consumer: SimpleConsumer(topic, partitions)
设置从头消费还是从最新的消费(smallest或largest)
while True
从指定topic的第index个流取数据
处理
(offset会自动提交到zookeeper,无需我们操作)

两种模型对比

分区消费模型更加灵活但是:
(1)需要自己处理各种异常情况;
(2)需要自己管理offset(以实现消息传递的其他语义);
组消费模型更加简单,但是不灵活:
(1)不需要自己处理异常情况,不需要自己管理offset;
(2)只能实现kafka默认的最少一次消息传递语义;

三种语义:

1.至少一次:生产者发送消息,由于网络原因可能会导致生产者发送消息发了两次,导致消费者重复消费数据。

2.至多一次:生产者发送消息,但是消息丢失,不会理会消费者是否接收到消息

3.至少有且只有一次:一对一的关系

 kafka 默认的话是至少一次语义。若想实现其他语义,利用分区消费模型自己定义拓展