在2个不同的集群中提交交易偏移

时间:2019-02-20 11:03:51

标签: apache-kafka kafka-consumer-api kafka-producer-api

我们使用的处理器具有一次发送的精确度(通过生产者来承担消费者的补偿),并且需要了解在从kafka-cluster-1中的某个主题中消费一条消息并生成到该主题时是否有可能发生kafka-cluster-2(反之亦然)。

这是事务处理程序的摘录:

messageProducer.beginTransaction(partitionId)
resultPublisher.publish(partitionId, resultTopic, messageRecord.key(), result)
val offsetAndMetadata = messageConsumer.getUncommittedOffsets(listenTopic, messageRecord)
messageProducer.sendOffsetsToTransaction(partitionId, offsetAndMetadata, consumerGroupId)
messageProducer.commitTransaction(partitionId)

我的理解是,生产者将尝试将偏移量提交给同一集群中的消费者主题。

我做了一些研究,但实际上找不到与多个集群有关的任何东西。

有可能吗?

1 个答案:

答案 0 :(得分:0)

可能的是,您可以“手动”将偏移量发送到发送了所生成消息的同一集群上的您自己的主题。这样,您可以使用交易提供的担保。

您将需要创建自己的偏移量主题,类似于Kafka内部的__consumer_offsets,其中应使用groupId,topic,partition作为键,并使用最新偏移量(已读取或将要读取)作为值。记住要使用日志压缩。

AFAIK无法在两个不同的集群之间进行交易。