Kafka consumer API简介
接口
org.apache.kafka.clients.consumer
Class KafkaConsumer<K,V>
java.lang.Object
org.apache.kafka.clients.consumer.KafkaConsumer<K,V>
All Implemented Interfaces:
java.io.Closeable, java.lang.AutoCloseable, Consumer<K,V>
简介
Kafka采用生产/消费模型。Kafka Client从kafka集群中消费记录。该SDK具备以下特性:
1. 屏蔽了Server集群的错误处理;
2. 不用感知服务器端分区的迁移;
3. 利用consumer groups可以实现消费端的负载均衡;
客户端保持了和Brokers的连接,如果连接异常关闭,可能引起连接的泄露。客户端为非线程安全模型,具体参见“多线程处理”相关描述。
1. Offsets and Consumer Position
Kafka为分区内的每条记录分配一个Offset。该Offset作为记录在分区的唯一标识。也方面记录消费者在分区中的位置。例如某消费者的Position为5,意味着:
1. 已经消费0-4的记录;
2. 下次从记录5开始消费。
消费者获取数据的同时,会不停的确认已经消费的position。一旦发生错误或者重启,可以从该position继续处理。确认的方式有两种可选:
1. 自动确认;
2. 手工控制,通过commitSync/commitAsync 进行同步或异步的确认。
2. Consumer Groups and Topic Subscriptions
Kafka 用Consumer Groups提供并发消费模型。同一Consumer Groups里的多个消费者共同从Kafka中消费记录。每个Consumer得到的所有内容的子集。Consumer Groups提供了弹性的消费分担模型。当某个Consumer挂掉或者新的Consumer加入,可以rebalence。举个栗子:
场景
1.某个Topic 有4个分区p0、p1、p3、p4;
2.有两个消费者consumer1和consumer2,同属于一个Consumer* Groups(名字不重要啊);
效果
1.初始状态
consumer1消费p0 和 p1;
consumer2消费p2和p3;
2.consumer2 down掉后
consumer1消费p0、p1、p3、p4;
3.consumer2活过来了,还来了个consumer3,可能的效果就是:
consumer1消费p0 和 p1;
consumer2消费p2;
consumer3消费p3;
tree new bee Time:
1. 同一Topic 支持N多的consumer groups ,没有多余的数据拷贝;
2. 提升了消息系统的bigger。提供了像queue类型消费系统的易用语法,同时又搞定传统发布订阅模型中groups内每个consumer都是取用数据全集的问题。
3. 提供了更加底层灵活的操作,ConsumerRebalanceListener可以让消费者感知到reblance。结合offset控制,状态控制,分区指定等,处女座、手动党、需要特殊服务党会很爽。
说明
来自于官方API文档的翻译和YY。我说原创,你咬我啊。官网地址:
http://kafka.apache.org/090/javadoc/index.html?org/apache/kafka/clients/consumer/KafkaConsumer.html