kafka常见问题整理

1. kafka的rebalance机制是什么

消费者分区分配策略:
     主要有三种策略:range范围分区(默认的)、round-robin轮询分区、sticky粘性。通过consumer配置项partition.assignment.strtegy指定分区分配策略类。
range:用分区数除以消费者个数得出每个consumer应该分配的分区
round-robin: 将分区以轮询的方式依次(每次一次)分配给各个consumer
sticky: 尽量让分区分配的比较均衡;当发生rebalance的时候,在保证分区均衡的前提下,尽量保持原有的分配方案不变动

rebalance触发条件有3个:
     1. 消费者组中consumer的个数发生变化
     2. 订阅的topic的个数发生变化
     3. 订阅的分区数量发生了变化

coordinator协调过程:
     以组为单位,每个组下面有多个消费者,以组为单位会有自己的group coordinator协调者,组里面无论增加或者重新修改分区数,协调者都会按照分配策略分配协调。每个组都有协调者,这些协调者其实均衡的散在集群之中的,其实就是以topic分区所在的broker为基准,会分配组的协调者。


2. kafka中高性能如何保障

  ●   首先,性能的最大瓶颈依然是IO,这个是不能逾越的鸿沟。虽然,broker在持久化数据的时候已经最大努力的使用了磁盘的顺序读写。
  ●   更进一步的性能优化是零拷贝的使用,也就是从磁盘日志到消费者客户端的数据传递,因为kafka是mq,对于msg不具备加工处理,所以得以实现。
  ●   然后就是大多数分布式系统一样,总要做tradeoff,在速度与可用性/可靠性中挣扎。ACK的0,1,-1级别就是在性能和可靠中权衡。


3. 简述kafka架构设计是什么样

  ●   kafka集群包含一个或多个broker(服务器),broker下有多个topic,topic下有多个partition(分区)。
  ●   有n个broker, 最多有n-1个备份
  ●   同一个topic下的分区会均匀的分到多个broker上面
  ●   分区之间是无序的,但分区内的消息是有序的
  ●   在订阅消费时,Kafka保证每条消息在同一个Consumer Group里只会被某一个Consumer消费
  ●   对于topic的消费,消费者的数量应不多于该topic分区的数量
  ●   在分布式订阅消息系统中,消息被持久化到一个topic中。与点对点消息系统不同的是,消费者可以订阅一个或多个topic,消费者可以消费该topic中所有的数据,同一条数据可以被多个消费者消费,数据被消费后不会立马删除。


4. kafka中zk的作用是什么

  ●   zookeeper是分布式协调,注意它不是数据库
  ●   kafka中使用了zookeeper的分布式锁和分布式配置及统一命名的分布式协调解决方案
  ●   在kafka的broker集群中的controller的选择,是通过zk的临时节点争抢获得的
  ●   brokerID等如果自增的话也是通过zk的节点version实现的全局唯一
  ●   kafka中的broker中的状态数据也是存储在zk中,zk不是数据库,所以存储的属于元数据


5. kafka消息丢失的场景有哪些

  ●   生产者在生产过程中的消息丢失
  ●   broker在故障后的消息丢失
  ●   消费者在消费过程中的消息丢失
 
ACK机制 ack有3个可选值,分别是1,0,-1
 
ack=0: 生产者在生产过程中的消息丢失
     简单来说就是,producer发送一次就不再发送了,不管是否发送成功。
 
ack=1: broker在故障后的消息丢失
     简单来说就是,producer只要收到一个分区副本成功写入的通知就认为推送消息成功了,这里有一个地方需要注意,这个副本必须是leader副本,只有leader副本成功写入了,producer才会认为消息发送成功。
     注意,ack的默认值就是1。这个默认值其实就是吞吐量与可靠性的一个折中方案。生产上我们可以根据实际情况进行调整,比如如果你要追求高吞吐量,那么就要放弃可靠性。
 
ack=-1: 生产侧和存储侧不会丢失数据
     简单来说就是,producer只有收到分区内所有副本的成功写入的通知才认为推送消息成功了。

offset机制
kafka消费者的三种消费语义
  ●   at-most-once:最多一次,可能丢数据
  ●   at-least-once: 最少一次,可能重复消费数据
  ●   exact-once message: 精确一次


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值