मैंने एक आवेदन के दो उदाहरण तैनात किए हैं। दोनों एप्लिकेशन एक ही कोड चलाते हैं और एक ही विषय से उपभोग करते हैं।

@KafkaListener( offsetReset = OffsetReset.EARLIEST, offsetStrategy = OffsetStrategy.DISABLED )
public class AppConsumer implements ConsumerRebalanceListener, KafkaConsumerAware {

    @Topic("topic")
    public void consumeAppInfo(@KafkaKey String name, @Body @Nullable String someString) {
         ...
    }

}

मुझे एक समस्या है जहां केवल एक एप्लिकेशन संदेश का उपभोग करता है। विषय में केवल एक विभाजन है, partition 0, जो मुझे लगता है कि डिफ़ॉल्ट है।

मैंने काफ्का लिस्टनर में ग्रुप-आईडी और थ्रेड्स जोड़ने की कोशिश की है। ऐसा लगता है कि यह कभी-कभी काम करता है और दूसरी बार नहीं।

@KafkaListener(groupId="myGroup", threads=10)

एक ही संदेश का उपभोग करने के लिए दोनों अनुप्रयोगों को प्राप्त करने का सबसे सरल उपाय क्या है?

1
John 24 अगस्त 2020, 17:15

2 जवाब

सबसे बढ़िया उत्तर

काफ्का में, उपभोक्ता समूह के भीतर केवल एक उपभोक्ता को प्रत्येक विभाजन को सौंपा जाता है। यदि आप अलग-अलग एप्लिकेशन द्वारा एक ही पार्टीशन से डेटा का उपभोग करना चाहते हैं, तो आपको प्रत्येक अलग एप्लिकेशन / इंस्टेंस के लिए अलग-अलग उपभोक्ता समूहों को निर्दिष्ट करने की आवश्यकता है।

1
Mikalai Lushchytski 24 अगस्त 2020, 17:19

आप समूह नहीं कर सकते हैं और प्रत्येक एप्लिकेशन को एक अलग उपभोक्ता आईडी दे सकते हैं, प्रत्येक उपभोक्ता सभी संदेशों का उपभोग करता है (जब तक कि उन्हें समूह को भी असाइन नहीं किया जाता)।

समूहों का उपयोग संदेशों के समानांतर प्रसंस्करण के लिए किया जाता है, समूह में प्रत्येक उपभोक्ता को संदेशों को संसाधित करने के लिए एक विभाजन को सौंपा जाता है।

अधिक जानकारी => काफ्का उपभोक्ता में Groupid और Consumerid के बीच अंतर

2
Tom Dierckx 24 अगस्त 2020, 17:22