如何保证kafka消息的可靠性传递?
如何保证消息的可靠性传输?
即传递的数据不能多一条,也不能少一条。不能多,也就是消息消费的重复性和幂等性问题。
不能少,也是说数据不能弄丢了。也就是如何处理消息丢失的问题?
消费端弄丢数据
唯一可能导致消费者弄丢数据的情况,就是说,你消费到了这个消息,然后消费者那边自动提交了 offset,让 Kafka 以为你已经消费好了这个消息,但其实你才刚准备处理这个消息,你还没处理,你自己就挂了,此时这条消息就丢咯。
这不是跟 RabbitMQ 差不多吗,大家都知道 Kafka 会自动提交 offset,那么只要关闭自动提交 offset,在处理完之后自己手动提交 offset,就可以保证数据不会丢。但是此时确实还是可能会有重复消费,比如你刚处理完,还没提交 offset,结果自己挂了,此时肯定会重复消费一次,自己保证幂等性就好了。
生产环境碰到的一个问题,就是说我们的 Kafka 消费者消费到了数据之后是写到一个内存的 queue 里先缓冲一下,结果有的时候,你刚把消息写入内存 queue,然后消费者会自动提交 offset。然后此时我们重启了系统,就会导致内存 queue 里还没来得及处理的数据就丢失了。
kafka弄丢数据
这块比较常见的一个场景,就是 Kafka 某个 broker 宕机,然后重新选举 partition 的 leader。大家想想,要是此时其他的 follower 刚好还有些数据没有同步,结果此时 leader 挂了,然后选举某个 follower 成 leader 之后,不就少了一些数据?这就丢了一些数据啊。
生产环境也遇到过,我们也是,之前 Kafka 的 leader 机器宕机了,将 follower 切换为 leader 之后,就会发现说这个数据就丢了。
所以此时一般是要求起码设置如下 4 个参数:
- 给 topic 设置
replication.factor
参数:这个值必须大于 1,要求每个 partition 必须有至少 2 个副本。- 在 Kafka 服务端设置
min.insync.replicas
参数:这个值必须大于 1,这个是要求一个 leader 至少感知到有至少一个 follower 还跟自己保持联系,没掉队,这样才能确保 leader 挂了还有一个 follower 吧。- 在 producer 端设置
acks=all
:这个是要求每条数据,必须是写入所有 replica 之后,才能认为是写成功了。- 在 producer 端设置
retries=MAX
(很大很大很大的一个值,无限次重试的意思):这个是要求一旦写入失败,就无限重试,卡在这里了。
生产环境按照上述要求配置,这样配置之后,至少在 Kafka broker 端就可以保证在 leader 所在 broker 发生故障,进行 leader 切换时,数据不会丢失。
生产者会不会弄丢数据?
如果按照上述的思路设置了 acks=all
,一定不会丢。
要求是,你的 leader 接收到消息,所有的 follower 都同步到了消息之后,才认为本次写成功了。如果没满足这个条件,生产者会自动不断的重试,重试无限次。
如何保证kafka消息的可靠性传递?相关推荐
- Kafka消息的可靠性
没有一个中间件能够做到百分之百的完全可靠,可靠性更多的还是基于几个9的衡量指标,比如4个9.5个9. 软件系统的可靠性只能够无限去接近100%,但不可能达到100%.所以kafka如何是实现最大可能的 ...
- 保证RabbitMQ消息的可靠性总结
文章目录 一.关于消息的可靠性 二.生产者发送消息对象 三.将消息发送给交换机 四.将消息发送给队列 五.将消息发送给消费者 六.保证消息的幂等性 七.死信消息的补偿[存在问题,待完善] 一.关于消息 ...
- 消息队列面试 - 如何保证消息的可靠性传输?
消息队列面试 - 如何保证消息的可靠性传输? 面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条 ...
- RabbitMQ(十):RabbitMQ 如何保证消息的可靠性
一条消费成功被消费经历了生产者->MQ->消费者,因此在这三个步骤中都有可能造成消息丢失. 一 消息生产者没有把消息成功发送到MQ 1.1 事务机制 AMQP协议提供了事务机制,在投递消息 ...
- RabbitMQ 如何保证消息的可靠性
一条消费成功被消费经历了生产者->MQ->消费者,因此在这三个步骤中都有可能造成消息丢失. 一 消息生产者没有把消息成功发送到MQ 1.1 事务机制 AMQP协议提供了事务机制,在投递消息 ...
- Kafka 消息可靠性
在 Kafka 工作机制 一文提及了 Kafka 消息的不可靠性.本文就 Kafka 消息的三种不可靠性(重复.丢失.乱序),分析它们出现的内部原因和解决办法. 作者:王克锋 出处:https://k ...
- kafka架构与原理 ,消息的可靠性与一致性幂等性,数据存储、zookeeper、使用场景
一.Kafka概述 Kafka作为一个商业级消息中间件 ,发布和订阅记录流,它类似于一个消息队列 先了解下Kafka的基本原理,然后通过对kakfa的存储机制.复制原理.同步原理.可靠性和持久性保证等 ...
- IM即时通讯-N-如何保证消息的可靠性展示
结论先行 客户端如何在推拉结合的模式下保证消息的可靠性展示? 原则: server拉取的消息一定是连续的 原则: 端侧记录的消息的连续段有两个作用: 1. 记录消息的连续性, 即起始中间没有断层, 2 ...
- kafka 脚本发送_Kafka笔记归纳(第五部分:一致性保证,消息重复消费场景及解决方式)...
写在开头: 本章是Kafka学习归纳第五部分,着重于强调Kafka的事一致性保证,消息重复消费场景及解决方式,记录偏移量的主题,延时队列的知识点. 文章内容输出来源:拉勾教育大数据高薪训练营. 一致性 ...
- Rabbitmq专题:rabbitMQ如何保证消息的可靠性投递?如何防止消息丢失
文章目录 1. 消息可能出现丢失的情况 2. 生产者如何保证消息的可靠性投递 2.1 消息落库打标 + confirm机制 2.2 消息幂等性如何保证? 2.3 延时消息确认 3. rabbitMQ服 ...
最新文章
- Mybatis的各种查询功能
- “中台不就是微服务吗?有啥区别?”
- nginx gzip配置
- python 倒计时功能怎么用print实现_python 实现倒计时功能(gui界面)
- Context类(上下文)
- mac回退jdk版本_mac中不同jdk版本切换
- python亲密度_Python OpenCV 图像2D直方图,取经之旅第 25 天
- Spring Boot基础学习笔记19:自定义RedisTemplate与RedisCacheManager
- linq to access 简单实现
- 洛谷——P1830 轰炸III
- 在C++中各类型拼接成一个string
- dentry path_lookat dput
- Ekho TTS 5.1发布
- c语言源程序的基础单位,c源程序的基本单位是什么
- notepad++ 设置保护色
- 盘点火影中写轮眼谁最强
- 马建威android视频,5.25春季班高级班第三期第五节课课堂总结
- WinX菜单是Win8系统开始菜单的下一代
- Springcloud入门第二篇
- codeforces 1509 B. TMT Document