Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 配置AggregatingReplyingKafkatTemplate以获取来自多个主题和多个使用者实例的响应_Apache Kafka_Kafka Consumer Api_Spring Kafka - Fatal编程技术网

Apache kafka 配置AggregatingReplyingKafkatTemplate以获取来自多个主题和多个使用者实例的响应

Apache kafka 配置AggregatingReplyingKafkatTemplate以获取来自多个主题和多个使用者实例的响应,apache-kafka,kafka-consumer-api,spring-kafka,Apache Kafka,Kafka Consumer Api,Spring Kafka,这是我贴出的另一个问题的继续。 以下是前面问题的链接: 我有一个需求,我已经尝试创建一个图表 我的要求是确保节点1应接收响应R1M1和R1M2,节点2应接收响应R2M1和R2M2。 consumerConfigProps.put(ConsumerConfig.GROUP_ID_CONFIG, "xxxx.yyyyy.zzzz"); 实施的事项: 在两个节点的生产者记录中设置KafkaHeaders.CORRELATION\u ID KafkCamessageListe

这是我贴出的另一个问题的继续。 以下是前面问题的链接:

我有一个需求,我已经尝试创建一个图表

我的要求是确保节点1应接收响应R1M1和R1M2,节点2应接收响应R2M1和R2M2。

 consumerConfigProps.put(ConsumerConfig.GROUP_ID_CONFIG, "xxxx.yyyyy.zzzz");
实施的事项:

  • 在两个节点的生产者记录中设置KafkaHeaders.CORRELATION\u ID

  • KafkCamessageListenerContainerBean使用容器属性中的两个响应主题创建。 ContainerProperties ContainerProperties=新的containerProperty(output-message-topic1,output-message-topic2)

  • 聚合回复kafkatemplate.setSharedReplyTopic(true)

  • consumerFactory配置了单个groupId。

     consumerConfigProps.put(ConsumerConfig.GROUP_ID_CONFIG, "xxxx.yyyyy.zzzz");
    
注意

  • 我能够用一个节点实现多个响应消息的聚合

  • 由于infra的限制,无法为每个使用者(节点)创建单独的主题

我需要有关更改的帮助,这些更改需要实施才能获得请求的相关聚合响应。

请参阅

您必须将每个实例配置为使用离散的回复主题分区,并且服务器必须将回复路由到请求的分区;或者,您必须为每个实例使用不同的
group.id
,以便向这两个实例发送回复(并被未发出请求的实例丢弃)

使用单个回复
TopicPartitionOffset
进行配置时,只要每个实例侦听不同的分区,就可以对多个模板使用相同的回复主题。配置单个回复主题时,每个实例必须使用不同的
group.id
。在这种情况下,所有实例都会收到每个回复,但只有发送请求的实例才能找到相关ID。这可能有助于自动缩放,但会带来额外网络流量的开销和丢弃每个不需要的回复的小成本。使用此设置时,我们建议您将模板的
sharedReplyTopic
设置为true,这将降低要调试的意外回复的日志记录级别,而不是默认错误

如果您有多个客户端实例,并且没有按照前面的讨论配置它们,那么每个实例都需要一个专用的回复主题。另一种方法是设置
KafkaHeaders.REPLY\u分区
,并为每个实例使用专用分区。标头包含一个四字节的整数(大端)。服务器必须使用此标头将应答路由到正确的分区(
@KafkaListener
执行此操作)。但是,在这种情况下,应答容器不能使用Kafka的组管理功能,必须配置为在固定分区上侦听(通过在其
containerProperty
构造函数中使用
TopicPartitionOffset


拉塞尔:我想我需要创建2个回复主题PartitionOffset。下面是我配置KafkCamessageListenerContainerBean的方式<代码>TopicPartitionOffset Topic1偏移=新的TopicPartitionOffset(响应-topic-1,0);TopicPartitionOffset topic2offset=新的TopicPartitionOffset(响应-topic-2,0);ContainerProperties ContainerProperties=新的ContainerProperty(Topic1偏移,Topic2偏移)并且我的实现确实有多个客户端实例。这是否意味着我必须使用第二种方法使用KafkaHeaders.REPLY_分区?对于2个主题,每个实例应该只侦听一个主题。一个关于主题1,另一个关于主题2。这样,模板就可以自动设置回复标题,您无需担心它们。您也可以通过这种方式在一个主题中使用两个分区。