主页 > 软件开发  > 

Kafka面试题及原理

Kafka面试题及原理
1. 消息可靠性(不丢失)

使用Kafka在消息的收发过程都会出现消息丢失,Kafka分别给出了解决方案

生产者发送消息到Brocker丢失消息在Brocker中存储丢失消费者从Brocker

幂等方案:【分布式锁、数据库锁(悲观锁、乐观锁)】

1.1 生产者发送消息到Brocker丢失

设置异步发送

1.2 消息在Brocker中存储丢失

1.3 消费者从Brocker接收消息丢失

如果consumer(消费者)挂掉,自动偏移量的错误可能会导致丢失或重复消费数据 解决方案:禁用自动提交偏移量,改为手动

同步提交(阻塞)异步提交(信息不准确)同步+异步组合提交 2. 消息顺序性

应用场景:

即时消息中的单对单聊天和群聊,保证发送方消息发送顺序与接收方的顺序一致充值转账两个渠道在同一个时间进行余额变更,短信通知必须要有顺序 问题原因: 一个topic的数据可能存储在不同的分区中,每个分区都有一个按照顺序的存储的偏移量,如果消费者关联了多个分区则不能保证顺序性。 解决方案(把消息存储在同一个分区下):发送消息时指定分区号发送消息时按照相同的业务设置相同的key 3. 高可用机制 集群模式分区备份机制 3.1 集群模式

3.2 分区备份机制 一个topic有多个分区,每个分区有多个副本,其中有一个leader,其余的是follower,副本存储在不同的broker中所有的分区副本的内容是都是相同的,如果leader发生故障时,会自动将其中一个follower提升为leader

过多的同步复制会降低效率(同步易阻塞),所以只设置较少的ISR

4. 数据清理机制 文件存储机制数据清理机制 4.1 文件存储机制 Kafka中topic的数据存储在分区上,分区如果文件过大会分段存储segment每个分段都在磁盘上以索引(xxxx.index)和日志文件(xxxx.log)的形式存储分段的好处是,第一能够减少单个文件内容的大小,查找数据方便,第二方便kafka进行日志清理。 4.2 数据清理机制

5. 高性能设计 消息分区:不受单台服务器的限制,可以不受限的处理更多的数据顺序读写:磁盘顺序读写,提升读写效率页缓存:把磁盘中的数据缓存到内存中,把对磁盘的访问变为对内存的访问零拷贝:减少上下文切换及数据拷贝消息压缩:减少磁盘IO和网络10分批发送:将消息打包批量发送,减少网络开销 5.1 零拷贝

在开启拷贝读信息要拷贝4次(性能不高)

开启零拷贝(页缓存)后只拷贝两次

标签:

Kafka面试题及原理由讯客互联软件开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Kafka面试题及原理