雪花连接器重复记录

时间:2020-08-03 09:40:42

标签: snowflake-cloud-data-platform exactly-once

根据docs

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�h\u000bQ1`��\u0005*�X_a�q.",
  "offset": 319944,
  "partition": 20,
  "topic": "answers.v6.dwh-interaction-event"
}

我们的主题密钥是Protobuf记录,但是我认为这应该不是问题。

1 个答案:

答案 0 :(得分:1)

如果重复的消息来自该主题,那么我们在元数据记录中是否会有不同的分区偏移对?

是的,如果两次生成,则消息的偏移量会不同。

仅一次是一个复杂的主题,一次精确消费的实现需要特定于目的地的过程。此blog covers the two failure modes which need to handled仅一次成功实施。

特别是:

  • A-写入目标失败。在这种情况下,kafka连接器SnowflakeSink需要通知kafka connect写入目标失败。这比看起来要复杂。
  • B-提交给kafka失败。在这种情况下,将为SnowflakeSink提供一条已处理的记录。因此,它需要回滚事务,以使该行不会插入到雪花侧,或者如果说启用了自动提交,则它需要检查目标以确保记录不存在。

我只是粗略地检查了连接器,但是based on this comment我认为A是在接收器中处理的。

它可以在其他地方处理,但是要处理B,我希望processedOffset instance variable会在开始时以目标位置中找到的最高偏移量填充。

通常,即使存在保证,我认为最好也要计划重复。正如@MikeWalton建议的那样,也有可能在生产者端生成重复项,并且Snowflake提供了用于合并表的强大工具。