根据文档
Both Kafka and the Kafka connector are fault-tolerant.
Messages are neither duplicated nor silently dropped.
Messages are delivered exactly once, or an error message will be generated
我们在SF 2中有具有相同RECORD_METADATA:的记录
{
"CreateTime": 1596445576884,
"key": "c�f4��H�hu000bQ1`��u0005*�X_a�q.",
"offset": 319944,
"partition": 20,
"topic": "answers.v6.dwh-interaction-event"
}
我们的主题密钥是Protobuf记录,但我认为这应该不是问题。
如果重复的消息来自主题,我们在元数据记录中不会有不同的分区偏移量对吗?
是的,如果生成两次,消息将具有不同的偏移量。
一次消费是一个复杂的主题,实现一次消费需要特定于目的地的流程。这个博客涵盖了两种失败模式,它们需要处理一次才能成功实现。
具体而言:
- A-写入目标失败。在这种情况下,kafka连接器SnowflakeSink需要通知kafka connect写入目标失败。这比看上去更复杂
- B-承诺卡夫卡失败。在这种情况下,SnowflakeSink会得到一个已经处理过的记录。因此,它需要回滚事务,这样行就不会插入雪花侧,或者如果启用了自动提交,它需要检查目标,以确保记录不存在
我只是粗略地检查了连接器,但根据这一评论,我认为a是在水槽中处理的。
它可以在其他地方处理,但为了处理B,我希望processedOffset实例变量在启动时由目标中找到的最高偏移量填充。
一般来说,即使有担保,我认为最好还是计划复制。正如@MikeWalton所建议的,在生产者端也可以生成重复项,Snowflake为合并表提供了强大的工具。