Apache camel 事务性地从JMS到多个Kafka集群的驼峰路由
我正在尝试将camel配置为从单个JMS队列读取数据并发布到2个不同的Kafka集群 我的配置类似于Apache camel 事务性地从JMS到多个Kafka集群的驼峰路由,apache-camel,jms,apache-kafka,Apache Camel,Jms,Apache Kafka,我正在尝试将camel配置为从单个JMS队列读取数据并发布到2个不同的Kafka集群 我的配置类似于 from("jms:queueName?concurrentConsumers=1") .transacted() .to("kafka:host1:port1?topic=kafkaTopic") .to("kafka:host2:port2?topic=kafkaTopic") 我的问题是如何将进程配置为处于事务中,这意味着如果它无法写入其中一个Kafka,它应该回滚来自另一个
from("jms:queueName?concurrentConsumers=1")
.transacted()
.to("kafka:host1:port1?topic=kafkaTopic")
.to("kafka:host2:port2?topic=kafkaTopic")
我的问题是如何将进程配置为处于事务中,这意味着如果它无法写入其中一个Kafka,它应该回滚来自另一个Kafka的写入,并且消息将保留在JMS队列中
在我的集成测试中,当我关闭第二个kafka并将消息发布到JMS队列时,消息仍然到达第一个kafka。好吧,我认为kafka不支持事务,但我认为最终可以通过主题压缩来完成。这意味着,如果您向卡夫卡主题发送一条带有密钥和某个值的消息,那么您必须发送一条带有相同密钥和null值的消息以使其无效。当清理开始时,它们将删除这两条消息,但只删除非活动段上的消息!!!嗯,我认为卡夫卡不支持事务,但我认为最终可以通过主题压缩来实现。这意味着,如果您向卡夫卡主题发送一条带有密钥和某个值的消息,那么您必须发送一条带有相同密钥和null值的消息以使其无效。当清理开始时,它们将删除这两条消息,但只删除非活动段上的消息!!!