16. kafka创建Topic时如何将分区分配给各Broker
- 副本因子不能大于 Broker 的个数;
- 第1个分区(partition_0)的第1个副本放置位置是随机从brokerList选择的;
- 其他分区的第一个副本放置位置相对于partition_0依次往后移。
如果我们有5个 Broker,5个分区,假设第1个分区放在第四个 Broker 上,那么第2个分区将会放在第五个 Broker 上;第3个分区将会放在第一个 Broker 上;第4个分区将会放在第二个 Broker 上,依次类推; - 各分区剩余的副本相对于第一个副本放置位置由一个随机数nextReplicaShift决定;
17. kafka的分区分布策略是怎样的?
分区分布的计算策略如下
- 副本因子不能大于 Broker 的个数;
- 第一个分区(编号为0)的第一个副本放置位置是随机从 brokerList 选择的;
- 其他分区的第一个副本放置位置相对于第0个分区依次往后移。也就是如果我们有5个 Broker,5个分区,假设第1个分区放在第四个 Broker 上,那么第2个分区将会放在第五个 Broker 上;第3个分区将会放在第一个 Broker 上;第4个分区将会放在第二个 Broker 上,依次类推;
- 剩余副本相对于第1个副本放置位置是由一个随机数nextReplicaShift 决定;
18. kafka分区数可以增加或减少吗?为什么?
Kafka 分区数据不支持减少是由很多原因的,比如减少的分区其数据放到哪里去?是删除,还是保留?删除的话,那么这些没消费的消息不就丢了。如果保留这些消息如何放到其他分区里面?追加到其他分区后面的话那么就破坏了 Kafka 单个分区的有序性。如果要保证删除分区数据插入到其他分区保证有序性,那么实现起来逻辑就会非常复杂。
19. kafka新建的分区会在哪创建存储目录
log.dirs参数,其值是 kafka 数据的存放目录;
这个参数可以配置多个目录,目录之间使用逗号分隔,通常这些目录是分布在不同的磁盘上用于提高读写性能。
如果log.dirs参数只配置了一个目录,那么分配到各个 broker 上的分区肯定只能在这个目录下创建文件夹用于存放数据。
但是如果log.dirs参数配置了多个目录,那么 kafka 会在哪个文件夹中创建分区目录呢?答案是:Kafka 会在含有分区目录最少的文件夹中创建新的分区目录,分区目录名为 Topic名+分区ID。
注意,是分区文件夹总数最少的目录,而不是磁盘使用量最少的目录!也就是说,如果你给 log.dirs 参数新增了一个新的磁盘,新的分区目录肯定是先在这个新的磁盘上创建直到这个新的磁盘目录拥有的分区目录不是最少为止。
20. 消费者和消费者组有什么关系?
每个消费者从属于消费组。消费者通过一个参数:group.id 来指定所属的组;
可以把多个消费者的group.id设置成同一个值,那么这几个消费者就属于同一个组;
比如,让c-1,c-2,c-3的group.id=“g1",那么c-1,c-2,c-3这3个消费者都属于g1消费组;
一个消费者,在本质上究竟如何定义:一个消费者可以是一个线程,也可以是一个进程,本质上就是一个consumer对象实例!
消费者组的意义:(可以让多个消费者组成一个组,并共同协作来消费数据,提高消费并行度)一个消费组中的各消费者,在消费一个topic的数据时,互相不重复!如果topic的某分区被组中的一个消费消费,那么,其他消费者就不会再消费这个分区了;
具体关系如下:
21. 谈一谈 kafka 的消费者组分区分配再均衡
在Kafka中,当有新消费者加入或者订阅的topic数发生变化时,会触发rebalance(再均衡:在同一个消费者组当中,分区的所有权从一个消费者转移到另外一个消费者)机制,Rebalance顾名思义就是重新均衡消费者消费。
Rebalance的过程如下:
- 第一步:所有成员都向coordinator发送请求,请求入组。一旦所有成员都发送了请求,coordinator会从中选择一个consumer担任leader的角色,并把组成员信息以及订阅信息发给leader。
- 第二步:leader开始分配消费方案,指明具体哪个consumer负责消费哪些topic的哪些partition。一旦完成分配,leader会将这个方案发给coordinator。coordinator接收到分配方案之后会把方案发给各个consumer,这样组内的所有成员就都知道自己应该消费哪些分区了。
对于rebalance来说,group coordinator起着至关重要的作用
22. 谈谈kafka消费者组分区分配策略
Range策略
Round-Robin策略
Stytic
Cooperative stytic
23. kafka监控插件都有哪些?
kafka manager
kafka-offset-monitor :主要做消费者偏移量的监控
kafka-eagle:功能很强大!(现已改名为:EFAK —— eagle for apache kafka)