如何防止消息丢失?
发送端:ack设置为-1或副本数,默认副本全部同步才会认为发送成功
接收端:对接收到的数据进行备份,定期进行检查对执行失败的数据重新执行;选择手动提交offset,对执行失败的数据不提交offset。
如何防止消息的重复消费?
在消费者端对数据进行幂等校验,禁止一定时间内出现相同含义的数据;或添加分布式锁。
如何做到顺序消费?
对获取到的数据进行再次排序
如何解决消息积压的问题?
1.添加新的消费者
2.在消费者中添加新的线程
3.验证消息的时效性,丢弃过期数据
如何实现延迟队列?
每隔一段时间消费数据,将当前时间与数据产生时间进行对比,小于延迟时间的不提交,并重新进入等待。
Kafka如何做到单机上百万的高吞吐量呢?
页面缓存技术:将数据缓存到系统的cache中,在刷新到磁盘当中
磁盘顺序写:按顺序写入磁盘
零拷贝技术:在cache中未查到数据,从磁盘获取加载到cache中后,不copy到Kafka进程中,而是由操作系统直接发送到网卡。