java—在多集群环境中,同一消息被多次生成/使用

brgchamk  于 2021-06-07  发布在  Kafka
关注(0)|答案(0)|浏览(182)

请在下面两个服务器中找到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次。
我想知道,是否有任何方法可以限制它,一旦消息被产生/消费,如果它是第二次来到同一个生产者/消费者,我们可以唯一地识别它,并避免在上述配置中产生/消费它。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题