kafka相关面试点整理

kafka的零拷贝原理
如果需要将磁盘中内容发送到远程服务器, 有几个过程
kafka相关面试点整理_第1张图片

内核空间到用户空间会发生切换。
read buffer和 socket Buffer之间切换。
应用程序可以不需要再从内核拷贝到用户程序,
同时也不用再从用户态拷贝到内核态。
可以提高io。
kafka相关面试点整理_第2张图片


kafka如何避免重复消费?
kafka通过维护offset的值避免重复消费,
默认情况下, 客户端会自动向kafka的broker提交offset,
如果消费端宕机, 可能会导致offset没有提交, 从而产生重复消费。

还有一个可能, 就是patition balance的机制, 就是把消息均衡的分配给
多个消费者,
那么consumer会从partition中消费消息,
如果5分钟内没有来得及消费, 会导致patition的rebalance的情况,

解决方案:1.提高消费端处理性能, 避免触发rebalance.
可以用异步的方式来处理消息, 缩短单个消费的时长。

调整消息处理的超时时间,

减少一次性从broker上拉取数据的条数。

可以针对消息生成的md5值保存到mysql, 每次消费的时候去查一下,
是否消费过。


如何保证kafka消息不丢失?
1.producer端需要确保消息能够达到broker端, 并且实现消息的存储。
producer默认是采用异步发送消息的, 确保消息发送成功?
1.异步改同步
2.添加异步回调来确保
3. retries
2. 通过patition的副本机制以及ack机制
leader和follower的。
ack=0,
acks=1.
acks = -1,

3.consumer必须能够消费到消息,
通过调整offset的值来重新消费。


如何保证消息的顺序消费?

kafka中通过patition的分区机制来实现物理存储,
维护多个partition来实现消息的存储,
单个分区的存储和消费,
kafka只能是保证在一个分区内的消息顺序性。


kafka中的ISR是什么?
为啥要用ISR?
发送到kafka的消息, 实际上最终是以partion的物理形态存放到磁盘上。
kafka为了保证parition的可靠性, 增加了partition的副本机制,
副本集中存在leader partition和follow partition,
生产者发送消息的时候, 会将消息存放在leader partition里面,
然后再把消息复制到follow partition里面, 一旦leader挂了, 可以
从剩下的parition副本里面选举出新的leader.

副本数据的同步
新leader的选举,
都涉及到网络通信, in-sync-replica
同步效率不高的节点会被踢出isR列表,

避免数据的丢失, isr里面的副本数据一般都是和主线程是最接近的。

你可能感兴趣的:(kafka,kafka,面试,分布式)