请在下面找到两台服务器中 kafka 消费者和 kafka 生产者的给定配置
消费者(C):
<int-kafka:message-driven-channel-adapter
id="inAdapter"
channel="fromKafka"
connection-factory="connectionFactory"
key-decoder="kafkaKeyDecoder"
payload-decoder="kafkaDecoder"
topics="sample_intopic"
offset-manager="offsetManager"
/>
生产者(P):
<int-kafka:producer-context id="producerContext" producer-properties="producerProperties">
<int-kafka:producer-configurations>
<int-kafka:producer-configuration
broker-list="${kafka.producer.config.brokerList}"
topic="headers['topic']"
key-class-type="java.lang.String"
value-class-type="com.XX.XX.vo.MesgeContentVO"
value-encoder="kafkaEncoder"
key-encoder="kafkaKeyEncoder"
compression-type="none"
/>
</int-kafka:producer-configurations>
</int-kafka:producer-context>
/>
我在服务器 1 和服务器 2 中部署相同的 kafka 消费者 (C) 和 kafka 生产者 (P),连接到同一个 kafka 代理。
每当我在服务器 1 中生成一条消息时,它就会被消耗四次(获得 4 条消息)。我的要求是生成的消息应该只被消费一次。
这里发生的是:比方说,通过调用 applicaton.send(message); 发送的消息;
P,C P,C
server s1 server s2
因此,两个 P 都充当生产者,并且每个人都将其传递给自己的消费者和其他消费者,所以,
P in s1 sending to -->C in s1 and C in s2
P in s2 sending to-->C in s2 and C in S1
因此 1 条消息产生 2 次并消耗 4 次。
我想知道,有什么方法可以限制它,一旦消息被生产/消费,如果它第二次发送给同一个生产者/消费者,我们可以唯一地识别它并避免在上述配置中生产/消费它。