Kafka:使用 Apache Beam 的恰好一次语义配置

Kafka: exactly once semantics configuration using Apache Beam

我正在尝试在 Kafka (Apache Beam) 中配置 exactly once 语义。 以下是我要介绍的变化:

制作人:

  1. enable.idenpotence = 真

  2. transactional.id = uniqueTransactionalId

消费者:

  1. 设置enable.auto.commit = false

    // 向消费者构建器添加了以下内容:

  2. .commitOffsetsInFinalize()

  3. .withReadCommitted()

KafkaIO#write 构建器添加了以下内容:

  1. .withEOS(numShards, sinkGroupId)

有谁知道还应该更改哪些内容才能在 Apache Beam KafkaIO 中实现恰好一次语义?

上面的配置看起来不错还是我理解错了?

如果我不使用事务 API(因为我在 apache beam 中没有显式生产者),是否需要指定 transactional.id 属性?

嗯,看来我终于找到了符合我要求的正确设置。这是我最终得到的结果:

1) KafkaIO.Read:

  • 使用 enable.auto.commit = false
  • 更新消费者属性
  • .withReadCommitted()
  • .commitOffsetsInFinalize()

2) KafkaIO#write:

  • .withEOS(numShards, sinkGroupId)

    它还将启用幂等性并为生产者设置 transactional.id

因此,通过这样的设置,我们将在读取时具有 至少一次 语义,以及 恰好一次 语义 正在写。