记一次关于位移提交的问题回答

简介: 对 Kafka 来说,它提供了手动位移提交的机制,可以暴露出来让用户自行实现位移的提交,也就意味着你可以对分区的位移有控制权,这完全取决于你本身的实现逻辑。

今晚撸得正兴奋时,有个朋友突然问了我一个关于位移提交的问题,他最近刚接触 Kafka,在一篇博客中看到了这么一段话:


640.png


然后他给我举了不是那么常规的一个问题,如下:

640.png


我一看问题就觉得有点奇怪了,我知道这个朋友肯定是从 RocketMQ 过来的,因为在 RocketMQ 的位移提交机制,只能是提交已消费的最小位移:


640.png


具体我有一篇文章专门详细地分析了 RocketMQ 的位移提交机制:RocketMQ 位移提交源码分析


因此,RocketMQ 是不会发生上面所说的情况。


我觉得产生这种疑惑是因为之前使用 RocketMQ 的时候,由于不用自己处理位移提交,一切交给 RocketMQ 处理了,而恰好 RocketMQ 提交位移的机制只能提交未消费最小偏移量以杜绝消息的丢失,导致了这位朋友切换到 kafka 需要手动处理位移的时候,产生了以上的困惑。


对 Kafka 来说,它提供了手动位移提交的机制,可以暴露出来让用户自行实现位移的提交,也就意味着你可以对分区的位移有控制权,这完全取决于你本身的实现逻辑。


如果是按照例子的描述操作,此时分区最新消费偏移量就是 7 消息的位移,因为 Kafka 它本身并没有重试对列机制,基于这个前提下,如果这条消息消费失败了,要么你客户端捕捉到再进行重试消费,要么就丢弃,消费后面的消息,并提交消费位移,一切都往前看,要不然你会阻塞后面的消费。此时,4 消息就丢失了。


可以这么解决:


自己实现一个与 RocketMQ 位移提交机制的 TreeMap 来存储消息,位移作 key,每次消费完移除,提交位移的时候只提交最小位移就好了,比如这个例子,只能提交 3 消息的位移。

相关文章
|
9天前
|
算法
两阶段提交
【8月更文挑战第11天】
15 1
|
13天前
|
程序员 开发工具 git
Git提交错了?别慌,学会直接删除提交记录
【8月更文挑战第7天】在日常的开发工作中,使用Git进行版本控制几乎是每位程序员的必修课。然而,即使是经验丰富的开发者,也难免会遇到“哎呀,我不小心提交了一些不该提交的内容!”的尴尬时刻。面对这样的错误,不必惊慌失措,Git提供了强大的功能来帮助我们修正这些错误,包括直接删除错误的提交记录。
40 0
|
3月前
|
SQL Oracle 关系型数据库
实时计算 Flink版产品使用合集之flinkcdc回撤流如果更新之前的数据,会把先前的数据删除,再插入更新的数据吗
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
3月前
|
消息中间件 Kafka 数据处理
了解Kafka位移自动提交的秘密:避免常见陷阱的方法
了解Kafka位移自动提交的秘密:避免常见陷阱的方法
153 1
|
11月前
|
存储 算法 关系型数据库
对比两阶段提交,三阶段提交做了哪些改进?
在分布式系统中,各个节点之间在物理上相互独立,通过网络进行沟通和协调。在关系型数据库中,由于存在事务机制,可以保证每个独立节点上的数据操作满足 ACID。但是,相互独立的节点之间无法准确的知道其他节点中的事务执行情况,所以在分布式的场景下,如果不添加额外的机制,多个节点之间理论上无法达到一致的状态。 在分布式事务中,两阶段和三阶段提交是经典的一致性算法,那么两阶段和三阶段提交的具体流程是怎样的,三阶段提交又是如何改进的呢?
79 0
|
3月前
|
C语言
《吉师作业》(2)之迟来的答案
《吉师作业》(2)之迟来的答案
41 0
|
存储 算法 NoSQL
分布式事务两阶段提交和三阶段提交有什么区别?
分布式事务两阶段提交和三阶段提交有什么区别?
190 0
分布式事务两阶段提交和三阶段提交有什么区别?
|
资源调度 分布式计算 数据可视化
一看就懂!任务提交的资源判断在Taier中的实践
根据环境资源的剩余情况来动态调整提交任务的速率是Taier必不可少的一项功能,那么Taier究竟是怎么来判断资源的呢?本文就为大家详细聊聊任务提交的资源判断在Taier中的实践。对该话题感兴趣的朋友千万别错过~
137 0
一看就懂!任务提交的资源判断在Taier中的实践
|
SQL 存储 运维
FLIP-147:支持包含结束任务的 Checkpoint 操作与作业结束流程修正
为了完善流执行模式对有限数据流的支持,所进行的改动以及更详细的实现。
FLIP-147:支持包含结束任务的 Checkpoint 操作与作业结束流程修正
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(上)
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(上)
278 0
极值点偏移问题的处理策略及探究(作业帮的毕冶老师总结)(上)