kafka消费机制要点
所属分类 kafka
浏览量 901
Topic
分区 partition
消费者组 ConsumerGroup
组协调者 groupCoordinator
客户端 ConsumerCoordinator
每个消费组有一个或者多个消费者
每个消费组拥有一个唯一的标识id
topic的每个partition只能分配给一个消费者
分配策略
partition.assignment.strategy
RangeAssignor 可能导致字典序靠前的消费者分配到的partition数量过多
RoundRobinAssignor
StickyAssignor 重平衡后,尽量保持原来分区不变
cordinator(某一个broker) 分配 consumer 消费的分区 ,选举consumer leader
消费组offset管理
自动提交
props.put("enable.auto.commit",”true”);
props.put("auto.commit.interval.ms",”1000”);
手动提交
props.put("enable.auto.commit", “false”);
consumer.commitSync();
consumer.commitAsync();
同步提交 commitSync
Consumer一直等待提交offset成功,在此期间不能继续拉取及消费消息
如果提交失败, 会一直重复尝试提交,直到超时,默认60秒
保证不丢消息 使用同步提交
重复消息 幂等处理
_consumer_offsets 默认50个分区
位移提交分区
Math.abs(hash(groupID)) % numPartitions
定期压缩,message key(groupID+topic+分区id),合并相同的key,保留最新的
消费组与分区重平衡 rebalance
消费者加入或离开(重启 宕机 等)
消费者无法在指定的时间内完成消息的消费(活锁 livelock)poll时间间隔大于 max.poll.interval.ms
重平衡 保证 高可用 水平扩展
重平衡期间,所有消费者都不能消费消息,整个消费组短暂不可用
消费者 定期发送心跳(hearbeat)到组协调者(group coordinator)的 broker
消费者拉取消息或者提交时,便会发送心跳
消费者超过一定时间没有发送心跳,会话(session)过期,组协调者认为该消费者已经宕机,然后触发重平衡
优雅关闭,消费者发送离开的消息到组协调者
0.10.1 心跳机制修改,发送心跳与拉取消息分离
更高版本的 Kafka 支持配置一个消费者多长时间不拉取消息但仍然保持存活,避免活锁(livelock)
活锁是指应用没有故障但是由于某些原因不能进一步消费
org.apache.kafka.clients.consumer.internals.Heartbeat
客户端 ConsumerCoordinator
https://gitee.com/dyyx/kafkademo
kafka消费端核心参数
kafka消费分区重平衡机制
上一篇
下一篇
linux netstat
linux 帮助命令使用
kafka消息存储及索引机制
kafka消费端核心参数
kafka消费分区重平衡机制
Kafka网络模型