基本概念
- Topic 主题
- 消费组 (一个topic可以有多个topic)
- 消费者(一个消费者必须属于一个消费组,一个topic可以有多个消费者)
分区
- 消费者的分区消息,是可以自己选择的,有分区器
消费的必要处理
- broker的ip和端口列表
- 消费组名称
- topic名称
- 序列化方式
消费者对象的属性
- Topic
- Partition
- Offset
- TimestampType(创建时间,追加日志的时间)
- serializedKeySize
- serializedValueSize
- Headers
- Key
- Value
- Checksum
消费者poll做的事情
- offset位移提交
- 分区中的offset
- 消费中的offset
- 消费者的位移存储在__consumer_offsets中
- 也可以指定位移消费
- 自动提交要解决的问题
- 重复消费(手动提交处理)
- 消息丢失(手动提交处理)
- kafka的再均衡
- 问题:再均衡期间,消费者无法读取到消息(可能会发生重复消费)
- 消费者拦截器拦截三种行为
- onConsum
- onCommit
- close
- 消费者类KafkaConsumer是非线程安全的
- 多线程处理
- 每个线程一个KafkaConsumer实例
- 多个消费者线程消费同一个分区
- 一个消费者,多线程处理消息
- 多线程处理
- 重要的参数
- fetch.min(max).bytes一次拉取的消息的数量
- fetch.max.wait.ms消息时间
- max.partition.fetch.byts每个分区返回给consumer最大数据
- max.pool.records最大小橡树