由于生产者关闭重试后,可能会造成消息丢失 , 所以我们更推荐让消费者用幂等性或者事务来防止重复消费 , 这在其它的消息队列中也同样适用 。
3. 如何做到消息的顺序消费就像在粗犷的风浪中维持航道一样困难,Kafka 的有序消费要求很高 。有时需要牺牲性能,专注于单一的分区和消费者 。
- 生产者:使用同步发送,ack 设置为 1
- 消费者:主题只能设置为一个 partition 分区,消费组中只能有一个消费者
4. 如何解决消息积压的问题消息积压如同海上的风暴,短时间内的消费者可能支撑不过生产者的速度,这时候可能需要更多的船只和船员加入作业 。
当消费者的消费速度,远远赶不上生产消息的速度一段时间后,kafka 会堆积大量未消费的消息 。
这会导致消费者寻址的速度越来越慢,kafka 对外提供服务的性能也越来越差 , 从而可能会造成整个服务链变慢,导致服务雪崩 。
一般,我们通过多线程或横向扩展的方式来解决:
- 消费者使用多线程消费,充分利用机器的性能;
- 在同一个消费组中创建多个消费者,部署到其它机器上,一起消费 。
5. 实现延时队列有时,信息需要在特定的时刻获取 , 就比如火车票待支付订单 30min 后会自动过期 。
文章插图
Kafka 也可设定的延时队列,就像是烹饪师傅精准控制火候 , 让美食在最佳时间完美呈现 。
方案如下:
- Kafka 中创建相应的主题 , 并创建消费者消费该主题的消息 , 消息中带有创建的时间戳;
- 消费消息时判断 , 未支付订单消息的创建时间是否已经超过 30 分钟:1)如果是,就修改订单状态为超时取消;2)否则,记录当前消息的 offset , 并等待 1 分钟后,再次向 kafka 中拉取该 offset 的消息进行判断,直到支付订单或超时取消 。
五、总结过去,信号火一点即传 , 如今,Kafka 使数据能在毫秒之间抵达世界的任何角落 。
高可用性的秘密不在于单舰的坚固,而在于整个舰队的协同 。
去重、延时、消费顺序的保证,使得 Kafka 成为一个强大且灵活的通信工具 。
Kafka 也不仅仅是一个消息队列 , 它是大数据时代的一艘高速航船,随时准备穿梭于信息的海洋,破浪前行 。而我们 , 作为水手和指挥官,应当熟悉船上每一个细节,以确保我们的货物——数据 , 能安全、准确地到达预定的港口 。
好了,现在 , 各位船长,让我们起航吧!
【深入浅出Kafka:高可用、顺序消费及幂等性】
推荐阅读
- 7k Star,一款开源的 Kafka 管理平台,功能齐全、页面美观!
- 云原生数据库 GaiaDB 架构设计解析:高性能、多级高可用
- 从MySQL看主从架构高可用性实现
- 利用Apache Kafka、Flink和Druid构建实时数据架构
- 解密MongoDB集群管理:构建高可用性数据库架构
- 图解Kafka适用场景,全网最全!
- Kafka有哪些应用场景?你能说上来几个?
- YashanDB数据库主备高可用架构实践
- Kafka:解锁大数据时代的搜索与分析
- 解密Kafka主题的分区策略:提升实时数据处理的关键