问题一:Kafka如何保证数据不会丢失?
Kafka如何保证数据不会丢失?
参考回答:
• 生产者生产消息可以通过comfirm配置ack=all解决;
• Broker同步过程中leader宕机可以通过配置ISR副本+重试解决;
• 消费者丢失可以关闭自动提交offset功能,系统处理完成时提交offset。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/628399
问题二:Kafka如何保证顺序消费?
Kafka如何保证顺序消费?
参考回答:
• 单 topic,单partition,单 consumer,单线程消费,吞吐量低,不推荐;
• 如只需保证单key有序,为每个key申请单独内存 queue,每个线程分别消费一个内存 queue 即可,这样就能保证单key(例如用户id、活动id)顺序性。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/628398
问题三:Kafka【线上】如何解决积压消费?
Kafka【线上】如何解决积压消费?
参考回答:
• 修复consumer,使其具备消费能力,并且扩容N台;
• 写一个分发的程序,将Topic均匀分发到临时Topic中;
• 同时起N台consumer,消费不同的临时Topic。
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/628397
问题四:Kafka如何避免消息积压?
Kafka如何避免消息积压?
参考回答:
• 提高消费并行度
• 批量消费
• 减少组件IO的交互次数
• 优先级消费
if (maxOffset - curOffset > 100000) { // TODO 消息堆积情况的优先处理逻辑 // 未处理的消息可以选择丢弃打日志 return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;}// TODO 正常消费过程return ConsumeConcurrentlyStatus.CONSUME_SUCCESS;
关于本问题的更多问答可点击原文查看:
https://developer.aliyun.com/ask/628401
问题五:如何设计Kafka消息队列?
如何设计Kafka消息队列?
参考回答:
需要支持快速水平扩容,broker+partition,partition放不同的机器上,增加机器时将数据根据topic做迁移,分布式需要考虑一致性、可用性、分区容错性
• 一致性:生产者的消息确认、消费者的幂等性、Broker的数据同步;
• 可用性:数据如何保证不丢不重、数据如何持久化、持久化时如何读写;
• 分区容错:采用何种选举机制、如何进行多副本同步;
• 海量数据:如何解决消息积压、海量Topic性能下降;
性能上,可以借鉴时间轮、零拷贝、IO多路复用、顺序读写、压缩批处理。
关于本问题的更多问答可点击原文查看: