kafka-消费者和生产者实例

2017/06/12 分布式

kafka消费者编程模型

分区消费模型

每个Consumer对应一个partition分区,一对一关系

分区消费伪代码描述 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(可选)
    (客户端默认帮助自动提交偏移量)

组(Group)消费伪代码描述

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

第index个线程(进程)
consumer(index)

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

两种消费模型对比

分区消费模型更加灵活但是:

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

语义

1. At most once 消息可能会丢,但绝不会重复传输
2. At least one 消息绝不会丢,但可能会重复传输
3. Exactly once 每条消息肯定会被传输一次且仅传输一次
Show Disqus Comments

Search

    Post Directory