广州商城网站建设报价,塑胶制品 东莞网站建设,免费seo关键词优化服务,关键词优化的最佳方法Kafka 消费者组Consumer数位移重平衡消费者组 (Consumer Group) : 可扩展且容错性的消费者机制
一个组内可能有多个消费者 (Consumer Instance) : 共享一个公共 ID (Group ID)组内的所有消费者协调消费订阅主题 (Subscribed Topics) 的所有分区 (Partition)每个分区只能由同个…
Kafka 消费者组Consumer数位移重平衡消费者组 (Consumer Group) : 可扩展且容错性的消费者机制
一个组内可能有多个消费者 (Consumer Instance) : 共享一个公共 ID (Group ID)组内的所有消费者协调消费订阅主题 (Subscribed Topics) 的所有分区 (Partition)每个分区只能由同个消费者组内的一个 Consumer 消费
Consumer Group 的特性
Consumer Group 有 n 个 Consumer。一个 Consumer 可能是进程或线程Group ID (字符串) : 标识唯一 Consumer GroupConsumer Group 订阅的主题的单个分区只能由组内的某个 Consumer 消费
两种消息引擎模型
俩种的伸缩性 (scalability) 都差点对点模型 : 消费队列 : 消息一被消费就从队列中删除只能被一个 Consumer 消费发布/订阅模型 : 允许消息被多个 Consumer 消费
Consumer Group
解决伸缩性 (scalability) 差问题消息队列模型 所有实例都属于同一个 Group发布 / 订阅模型 所有实例分别属于不同的 Group
Consumer Group 伸缩性
Consumer Group 订阅了多个主题后组内的每个实例不要求一定要订阅主题的所有分区它只会消费部分分区中的消息Consumer Group 之间彼此独立互不影响它们能够订阅相同的一组主题而互不干涉Broker 端的消息留存机制Kafka 的 Consumer Group 能规避伸缩性差的问题
Consumer数
Consumer Group 下理想 Consumer 数
Consumer 数 该 Group 订阅主题的分区总数
例子
一个 Consumer Group 订阅了 3 个主题A、B、C 的分区数分别是1 , 2 , 3 该 Group 的总分区数是 6为该 Group 设置 6 个 Consumer 能最大限度实现高伸缩性
设置 或 6 :
设 3 个 Consumer每个 Consumer 平均消费 2 个分区 (6/3)设 8 个 Consumer有 2 (8 – 6) 个 Consumer 无法被分配分区处于空闲状态生产中不推荐设 Consumer 数 总分区数多余的 Consumer 会浪费资源
位移
Kafka 管理位移 :
消费位置信息 : 位移 (Offset) : 消费者在消费时 记录消费条数Offset 类似于一组 KV 对 Key : 分区V : Consumer 消费该分区的最新位移用 Java 类似结构 (MapTopicPartition, Long) : TopicPartition : 一个分区Long : 位移的类型
Kafka 有新旧 Consumer
新旧 Consumer 的管理位移方式不一样老 Consumer Group 把位移放在 ZK , 减少 Broker 开销新 Consumer Group 把位移放在 __consumer_offsets 主题
ZK 不适合频繁的写更新
Consumer Group 的位移更新是频繁操作大量写操作会拖慢 ZK 集群的性能
重平衡
Rebalance
协议规定 Group 下的所有 Consumer 怎么分配订阅 Topic 的每个分区Rebalance 时Group 下所有的 Consumer 都要一起参与
Rebalance 触发条件 :
组内成员数变化 : 有新 Consumer 加入/离开组或 Consumer 异常被踢出组订阅主题数变化 : 新创的主题 , 被 Group 订阅了 , 该 Group 就会 Rebalance订阅主题的分区数变化 : 增加主题的分区数订阅该主题的所有 Group 会 Rebalance
Rebalance 的 3 种分配策略 :
都是为了公平分配 : 每个 Consumer 分配平均的分区数如 : 一个 Group 内有 10 个 Consumer要消费 100 个分区理想的分配策略 : 每个 Consumer 平均分配 10 个分区当有分配倾斜就会忙死/闲死
Group 发生 Rebalance
设某个 Group 有两个 Consumer如 : A/B当 C 加入时会触发 Rebalance并按照分配策略重新为 A、B 和 C 分配分区Rebalance 后的公平分配 : 每个 Consumer 消费 2 个分区 Rebalance 对 Consumer Group 消费影响大
Rebalance 类似 JVM 的 STWRebalance 时所有 Consumer 都会停止消费等待 Rebalance 完成