Kafka:使用 Apache Beam 的恰好一次语义配置
Kafka: exactly once semantics configuration using Apache Beam
我正在尝试在 Kafka (Apache Beam) 中配置 exactly once 语义。
以下是我要介绍的变化:
制作人:
enable.idenpotence
= 真
transactional.id
= uniqueTransactionalId
消费者:
设置enable.auto.commit
= false
// 向消费者构建器添加了以下内容:
.commitOffsetsInFinalize()
.withReadCommitted()
向 KafkaIO#write
构建器添加了以下内容:
.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
。
因此,通过这样的设置,我们将在读取时具有 至少一次 语义,以及 恰好一次 语义
正在写。
我正在尝试在 Kafka (Apache Beam) 中配置 exactly once 语义。 以下是我要介绍的变化:
制作人:
enable.idenpotence
= 真transactional.id
= uniqueTransactionalId
消费者:
设置
enable.auto.commit
= false// 向消费者构建器添加了以下内容:
.commitOffsetsInFinalize()
.withReadCommitted()
向 KafkaIO#write
构建器添加了以下内容:
.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
。
因此,通过这样的设置,我们将在读取时具有 至少一次 语义,以及 恰好一次 语义 正在写。