数据传输的语义有几种?如何实现?
- 至多一次(At Most Once): ack = 0
- 至少一次(At Least Once): ack=-1, replication>1,min.insync.replicas >= 2
- 精确一次(Exactly once): 幂等性+至少一次
kafka 在什么情况下会出现消息丢失?
- topic 的副本如果只有 1 个;
- ack!=all;
- 不清洁选举机制如果开启,也可能造成数据丢失(不清洁选举就是说在所有 ISR 副本全部宕机的情况下,可以让 OSR 副本成为 Leader,而 OSR 中的数据显然不全;那么,就算之前的Leader 重新上线了,也会被进行日志截断)
kafka 是如何实现高吞吐率的?如何再提高?
- 消息顺序追加(磁盘顺序读写比内存的随机读写还快)
- 页缓存等技术(数据交给操作系统的页缓存,并不真正刷入磁盘;而是定期刷入磁盘)
- 使用 Zero-Copy (零拷贝)技术来进一步提升性能(将数据直接从磁盘文件复制到网卡设备中,而不需要经由应用程序之手);
- 进一步提高:
a) 增加分区个数
b) 增加batch.size,减小linger.ms
c) 设置数据压缩
d) 增加recordaccumulator 缓冲区大小
请谈一谈 kafka 数据一致性原理
HW,leader epoch
详情见:
[https://blog.csdn.net/weixin_38643743/article/details/132184527]