如何构建批流一体数据融合平台的一致性语义保证?(14)
第一,一致性抽取
上文提到数据要被发送进 Kafka,同时 offset 要被持久化到 Kafka,这是对两个不同 Topic 的写入。通过利用 Kafka 事务性消息,我们能够保证 offset 的写入和数据的发送是一个事务。如果 offset 没有持久化成功,下游是看不到这批数据的,这批数据实际上最终会被丢弃掉。
所以对于源端的发送,我们对 Kafka Connect 的 Source Worker 做了一些改造,让其能够提供两种模式,如果用户的数据本身是具备主键去重能力的,就可以继续使用 Kafka Connect 原生的模式。
如果用户需要强一致时,首先要开启一个源端的事务发送功能,这就实现了源端的一致性抽取。其可以保证数据进 Kafka 一端不会出现数据重复。这里有一个限制,即一旦要开启一致性抽取,根据 Kafka 必须要将 ack 设置成 all,这意味着一批数据有多少个副本,其必须能够在所有的副本所在的 broker 都已经应答的情况下,才可以开始下一批数据的写入。尽管会造成一些性能上的损失,但为了实现强一致,你必须要接受这一事实。
推荐阅读
- 小鱼人|如何在新赛季稳定上分?善于抓失误的小鱼人,值得认真练上一波
- 阴阳师|阴阳师SR川猿强度如何 是否值得抽卡 改变斗技环境 大佬的新玩具
- 手机游戏|梦幻西游手游:活力如何换金币 一切都已给出 就看你的选择
- 华佗|三国杀:两位\奶爸\,朱治与华佗比,强度如何呢?
- 亲朋上分|《亲朋上分》266391亲朋下分亲朋上下分永劫无间崔三娘技能介绍 崔三娘如何获得更多技能
- s6|金铲铲之战:S6双城传说如何才能快速上手?基础知识很关键
- |冰雪传奇:平民玩家四转后如何打金
- 穿越火线|CF:传说武器再度上新,那王者、炫金该如何发展?
- 打野|打野已经被削到几乎不能再削了,到底如何平衡打野位置?
- 电子竞技|新华社对话明凯、阿布,探讨电竞选手是如何炼成的?宁王无辜躺枪