消息队列Kafka——常见问题总结

本文总结了消息队列Kafka的优缺点和常见问题,包括消息重复、消息可靠性、消息积压及Kafka的高性能实现。针对消息重复,提出了MVCC和去重表等解决方案;为保证消息可靠性,分析了生产者、消费者和Kafka丢失数据的原因及应对措施;对于消息积压,给出了快速消费积压数据的策略。此外,探讨了Kafka的并行处理、ISR机制以及如何利用磁盘特性和操作系统特性实现高性能。
摘要由CSDN通过智能技术生成

一、消息队列优缺点:

优点:解耦、异步、削峰

缺点:

  1. 系统可用性降低
  2. 系统复杂性提高
  3. 一致性问题

二、常见问题:

1、消息重复问题

消息端重复发送情况:

生产者(消息发送端)发送消息成功进入消息中间件,由于各种原因发送端没有收到消息中间件返回的“成功”结果,而且发送端还存在重试机制;

消息中间件重复:

消息被消费端成功消费后,消息中间件没有收到消息的处理结果;

重复消费解决方式

  • MVCC:多版本并发控制,乐观锁的一种实现;生产者发送消息进行数据更新时带上数据的版本号,消费端去验证数据的版本号,版本号不一致则操作无法成功;
  • 去重表:数据库表上创建唯一索引;
  • 消费端保证操作的幂等性

2、消息的可靠性问题

消费端丢失数据:

消费端消费到消息,然后消费端自动向Kafka提交了Offset,但还没来及处理,消费端由于各种原因出错了;

关闭Kafka自动提交Offset,处理完消息之后,手动提交Offset,可保证数据不会丢失,但此方法会存在重复消费问题,比如刚处理完消息还没来得及提交Offset,消费者挂了;

Kafka丢失数据:

 Follower 还没有来得及同步数据,Leader 挂了,然后选举某个 Follower 成 Leader 之后,这就会丢了一些数据。

解决方法:

  • 给 Topic 设置 replication.factor 参数:这个值必须大于 1,要求每个 Partition 必须有至少 2 个副本。

  • 在 Kafka 服务端设置 min.insync.replicas 参数:这个值必须大于 1,这个是要求一个 Leader 至少感知到有至少一个 Follower 还跟自己保持联系,没掉队,这样才能确保 Leader 挂了还有一个 Follower 吧。

  • 在 Producer 端设置 acks=all:要求每条数据,必须是写入所有 Replica 之后,才能认为是写成功了

  • 在 Producer 端设置 retries=MAX:一旦写入失败,就无限重试。

生产者丢失数据:

设置 acks=all,基本就不会丢失数据

3、消息持续积压问题

  • 修复 Consumer 的问题,确保其恢复消费速度,然后将现有 Consumer 都停掉。

  • 新建一个 Topic,Partition 是原来的 10 倍,临时建立好原先 10 倍或者 20 倍的 queue 数量。

    然后写一个临时的分发数据的 Consumer 程序,这个程序部署上去消费积压的数据,消费之后不做耗时的处理,直接均匀轮询写入临时建立好的 10 倍数量的 queue。

  • 接着临时征用 10 倍的机器来部署 Consumer,每一批 Consume

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值