赞
踩
1.producer 生产消息 根据 消息的key来确定 发送到对应topic的哪个分区,如果没有key那么则轮询均匀发送到各partition 但是无法保证有序性
2.同一consumer group中的各消费者只能消费同一个topic中某个partition中的数据 而不会出现 同一同一consumer group中的consumerA 与 consumerB 同时消费 topic1 中的 partition1中的数据 这样会造成重复消费
3.消费的最大并行度 为 partition数量 比如 如果刚好出现下面这种情况 topicA的数据存放在了两台kafka broker(机器)刚好他们 每台3个分区,就会 出现 下图这种情况 还是会出现浪费两个consumer资源的情况
4.那么如何不会出现 浪费consumer的情况呢?现在做个题
有个topic 有两台 broker 共 3+4=7个partition 那么 刚好多少个consumer能达到消费最大效率且不会浪费 资源呢?或者说 假设我当前consumergroup中有6个consumer 那么有几个consumer会被浪费呢?
根据以下算法
topic下各broker中总分区数/该consumer group中consumer数
A=7/6=0.75向上取整M=2
N = 该consumer group中consumer数=6 所以等式有6个
C0=[P(2*0),P((0+1)*2-1)]=[P0,P1]
C1=[P(2*1),P((1+1)*2-1)]=[P2,P3]
C2=[P(2*2),P((2+1)*2-1)]=[P4,P5]
C3=[P(2*3),P((3+1)*2-1)]=[P6,P7]
C4=[P(2*4),P((4+1)*2-1)]=[P8,P9]
C5=[P(2*5),P((5+1)*2-1)]=[P10,P11]
由上式可知
7个partition只需要4个 consumer即可 所以 该组中有俩consumer资源是浪费的,所以4个consumer刚好能保证最大效率且不会有consumer资源被浪费
5.一个topic可能数据分布到 多个 broker的多个partition中,然后一个broker中有多个partition,每个partition又可能有一到多个副本 其中一个leader 其它都是follower 副本同步leader中的数据 正常
感觉不到 其它flower leader负责日常的读写数据 当 leader挂了时 从 follower中选取 新的leader
6.停止 Kafka 集群时,一定要等 Kafka 所有节点进程全部停止后再停止 Zookeeper 集群。因为 Zookeeper 集群当中记录着 Kafka 集群相关信息,Zookeeper 集群一旦先停止, Kafka 集群就没有办法再获取停止进程的信息,只能手动杀死 Kafka 进程了
7.生产者往kafka发消息的分区策略
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。