博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
kafka顺序消息问题
阅读量:6513 次
发布时间:2019-06-24

本文共 1025 字,大约阅读时间需要 3 分钟。

  hot3.png

注意这里指的顺序消息是指的kafka的局部(partition)顺序消息消费。

针对这种场景的处理思路是:针对部分消息有序(message.key相同的message要保证消费顺序)场景,可以在producer往kafka插入数据时控制,同一key分发到同一partition上面。

因为每个partition是固定分配给某个消费者进行消费的,所以对于在同一个分区的消息来说,是严格有序的。

 

同时顺序消息需要注意以下几个问题:

  1. 消息重试对顺序消息的影响
    对于一个有着先后顺序的消息A、B,正常情况下应该是A先发送完成后再发送B,但是在异常情况下,在A发送失败的情况下,B发送成功,而A由于重试机制在B发送完成之后重试发送成功了。
    这时对于本身顺序为AB的消息顺序变成了BA
  2. 消息producer发送逻辑的控制
    消息producer在发送消息的时候,对于同一个broker连接是存在多个未确认的消息在同时发送的,也就是存在以上场景1说到的情况,虽然A和B消息是顺序的,但是由于存在未知的确认关系,有可能存在A发送失败,B发送成功,A需要重试的时候顺序关系就变成了BA。简之一句就是在发送B时A的发送状态是未知的。

针对以上的问题,严格的顺序消费还需要以下参数支持:max.in.flight.requests.per.connection

这个参数官方文档的解释是:

The maximum number of unacknowledged requests the client will send on a single connection before blocking. Note that if this setting is set to be greater than 1 and there are failed sends, there is a risk of message re-ordering due to retries (i.e., if retries are enabled).

大体意思是:在发送阻塞前对于每个连接,正在发送但是发送状态未知的最大消息数量。如果设置大于1,那么就有可能存在有发送失败的情况下,因为重试发送导致的消息乱序问题。

所以我们应该将其设置为1,保证在后一条消息发送前,前一条的消息状态已经是可知的。

转载于:https://my.oschina.net/jayhu/blog/814207

你可能感兴趣的文章
单片机小白学步系列(九) 用万用焊板搭建实验电路
查看>>
Tomcat PK Resin
查看>>
(转)全文检索技术学习(三)——Lucene支持中文分词
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
阿里盒马领域驱动设计实践
查看>>
vuex 存值 及 取值 的操作
查看>>
HDU 2242 考研路茫茫——空调教室(边双连通)
查看>>
如何在C#项目中使用NHibernate
查看>>
安装python包到指定虚拟环境
查看>>
力扣(LeetCode)21
查看>>
网页视频流m3u8/ts视频下载
查看>>
Python 基础起步 (十) 什么叫函数?
查看>>
8年软件测试工程师感悟——写给还在迷茫中的朋友
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战
查看>>
使用Swoole加速Laravel(正式环境中)
查看>>
mockjs让前端开发独立于后端
查看>>
延迟脚本的方式
查看>>
1.4linux单用户模式下修改root密码和救援模式修改root密码
查看>>