Зафиксируйте транзакционное смещение в 2 разных кластерах - PullRequest
0 голосов
/ 20 февраля 2019

Мы используем процессоры с единовременной доставкой (фиксируя смещение потребителя через производителя), и нам необходимо понять, возможно ли это сделать при использовании сообщения из темы в 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 голосов
/ 20 февраля 2019

Возможно, вы можете «вручную» отправлять смещения в свою тему в том же кластере, куда отправляется созданное сообщение.Таким образом, вы можете использовать гарантии, предоставляемые транзакциями.

Вам потребуется создать собственную тему для смещений, аналогично внутреннему __consumer_offsets Kafka, где в качестве ключа вы должны использовать groupId, topic, partition и как значение наиболеенедавнее смещение (уже прочитано или будет прочитано).Не забудьте использовать сжатие журнала.

AFAIK Нет возможности проводить транзакции в двух разных кластерах.

...