文章目录
1、Kafka中如何做到数据唯一(数据去重)(面试重点)
- 至少一次(At Least Once)= ACK级别设置为-1 + 分区副本大于等于2 + ISR里应答的最小副本数量大于等于2
- 最多一次(At Most Once)= ACK级别设置为0
- 精确一次(Exactly Once):就是至少一次+幂等性+事务,对于一些非常重要的信息,比如和钱相关的数据,要求数据既不能重复也不丢失。
- 总结:
至少一次可以保证数据不丢失,但是不能保证数据不重复;
最多一次可以保证数据不重复,但是不能保证数据不丢失。
精确一次可以保证数据不丢失,也可以保证数据不重复。
2、你知道 Kafka 是如何做到消息的有序性?【面试重点】
生产者发送的数据,单分区内可以做到有序,多分区,无法保证,除非把多个分区的数据拉到消费者端,进行排序,但这样做需要等待生产者将数据发送完毕,这显然是不切合实际的,而且效率很低,还不如直接设置一个分区。
kafka_19">3、kafka是如何处理数据乱序问题的。
开启幂等性,且设置sender线程中可以缓存kafka集群没有应答的请求数量小于等于5
4、zk在Kafka集群中有何作用?
zk用来存放一些Kafka的基本信息,比如:
/Kafka/brokers/ids下面记录了有哪些服务器节点
/Kafka/brokers/topic下面记录了有哪些主题,以及主题下面记录了谁是Leader,有哪些服务器可以用
/Kafka/controller下面记录了辅助选举的一些信息
在/Kafka/consumers里面,老版本0.9版本之前,存放的是消费者的偏移量,新版本的根本没放在zk中,直接放在集群中了
5、简述Kafka集群中的Leader选举机制(面试重点)
1)每一个broker上线时,会在zk中进行注册
2)每个broker中都有一个controller,哪个controller先在zk中注册,谁选举时说了算
3)选举规则是:在ISR中存活为前提,按照AR中排在前面的优先
4)说的算的controller检测broker节点的变化,将节点信息上传到zk,其他controller从zk中同步节点信息
5)假定broker中的leader挂掉了,controller监听到节点变化,会进行重新的选举,并更新ISR