如何构建批流一体数据融合平台的一致性语义保证?(17)

还有一点是上面提及的,如何能够在一个流式框架实现批量同步的一致性,对于所有的流式框架,需要引入一些边界条件来标志着一次批量同步的开始和结束。DataPipeline 在每次批量发送开始和结束后,会引入一些控制量信号,然后在 Sink端进行相应处理。同样为了保证事务一致性,在 Sink 端处理这种批量同步时,依然要做一些类似于二阶段提交这样的方式,避免在一些极端情况下出现数据不一致的问题。

四、问题和思考

上文介绍的是 DataPipeline 如何基于 Kafka Connect 做事务同步一致性的方案。

DataPipeline 在使用 Kafka Connect 过程中遇到过一些问题,目前大部分已经有一些解决方案,还有少量问题,可能需要未来采用新的方法/框架才能够更好的解决。

第一,反压的问题

Kafka Connect 设计的逻辑是希望实现源端和目的端完全解耦,这种解偶本身是一个很好的特性。但也带来一些问题,源和目的地的 task 完全不知道彼此的存在。刚才我提到 Kafka 有容量限制,不能假定在一个客户环境里面,会给你无限的磁盘来做缓冲。通常我们在客户那边默认 Topic 为 100G 的容量。如果源端读的过快,大量数据会在 Kafka 里堆积,目的端没有及时消费,就有可能出现数据丢失,这是一个非常容易出现的问题。

推荐阅读