我们使用的处理器具有一次发送的精确度(通过生产者来承担消费者的补偿),并且需要了解在从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)
我的理解是,生产者将尝试将偏移量提交给同一集群中的消费者主题。
我做了一些研究,但实际上找不到与多个集群有关的任何东西。
有可能吗?
答案 0 :(得分:0)
可能的是,您可以“手动”将偏移量发送到发送了所生成消息的同一集群上的您自己的主题。这样,您可以使用交易提供的担保。
您将需要创建自己的偏移量主题,类似于Kafka内部的__consumer_offsets,其中应使用groupId,topic,partition作为键,并使用最新偏移量(已读取或将要读取)作为值。记住要使用日志压缩。
AFAIK无法在两个不同的集群之间进行交易。