在阅读了Kafka幂等操作和事务之后,我想看看Kafka源连接器是否使用其中任何一个,以确保恰好一次的语义。
经过一点阅读,我发现源连接器使用某种"偏移"是自己的,让它存储它所做的最后一个操作,然后我看到 MongoDB 的 Debezium 源连接器只能实现至少一次语义。
所以我的问题是为什么MongoDB源连接器不能保证恰好一次语义? 如果连接器可以在每条带有事务的消息旁边提交其偏移量,则可以确保消息和偏移量肯定都在 Kafka 内部,从而保证恰好一次语义。
请参阅 KIP-618 了解源连接器,参见 318 使连接器生产商幂等
Kafka 是一个仅追加日志。如果源连接器在生成事件和提交偏移量作为正常使用者操作的一部分之间死亡,则使用者可能需要重置回上一个未提交的偏移量