Debezium系列之:debezium采集数据库数据发送到Kafka Topic实现exactly-once,确保采集到的数据只会发送一次,不会出现数据丢失或重复的情况
一、需求背景
- debezium为了保证采集的数据不丢失,现在是至少一次发送数据到Kafka Topic,下游需要根据需求进行数据的去重
- 希望debezium采集数据库数据发送到Kafka Topic能够实现exactly-once,确保采集到的数据只会发送一次,不会出现数据丢失或重复的情况
二、exactly-once的含义
- 数据exactly-once指的是在数据处理中确保每条数据只被处理一次的一种保证。在数据处理中,重复或丢失数据的发生可能会导致结果出现错误或不一致。因此,确保每条数据只被处理一次是非常重要的。exactly-once的概念广泛应用于流式计算、消息队列、ETL(Extract-Transform-Load)等数据处理领域。在实现exactly-once处理时,需要使用一些技术和方法,如事务、幂等性、checkpoint等。
三、Kafka Connect实现exactly-once
- Kafka 本身提供事务支持,这是一次交付的构建块,并且在相当长的一段时间内(从 Kafka 0.11 开始),一次交付本身也提供了支持。Kafka Connect 中缺少的是对一次性交付的支持。这在 Kafka 3.3.0 中发生了变化,它增加了对源连接器的一次交付的支持。
- 源连接器生成的事件以及在未提交事务期间写入的事件对于使用者来说是不可见的,只有在事务提交后才变得可见,其中还包括与这些事件对应的偏移量的提交。
- 源连接器本身不创建事务,它由 Kafka Connect 处理。连接器仅在需要时定义事务边界&#