0

根据文档

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 记录,但我认为这应该不是问题。

4

1 回答 1

1

如果重复消息来自主题,元数据记录中不会有不同的分区偏移量对吗?

是的,如果您生成两次,则消息将具有不同的偏移量。

Exactly once 是一个复杂的话题,Exactly-once 消费的实现需要一个特定于目的地的过程。这篇博客介绍了两种失败模式,它们需要处理一次才能成功实施。

具体来说:

  • A - 写入目标失败。在这种情况下,kafka 连接器 SnowflakeSink 需要通知 kafka connect 写入目的地失败。这比看起来更复杂。
  • B - 提交卡夫卡失败。在这种情况下,SnowflakeSink 会获得一条已经处理过的记录。所以它需要回滚事务,这样行就不会插入到雪花端,或者如果启用了自动提交,它需要检查目标以确保记录不存在。

我只对连接器进行了粗略的审查,但基于此评论,我认为 A 是在接收器中处理的。

它可以在其他地方处理,但要处理 B,我希望在开始时由在目标中找到的最高偏移量填充processesOffset 实例变量。

一般来说,即使存在保证,我认为最好计划重复。正如@MikeWalton 建议的那样,也可以在生产者端生成副本,并且 Snowflake 为合并表提供了强大的工具。

于 2020-08-03T15:46:16.637 回答