首页  

kafka消费机制要点     所属分类 kafka 浏览量 214
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网络模型