Создание одновременных потребителей Kafka в Camel-Kafka - PullRequest
1 голос
/ 21 апреля 2020

Я пользуюсь верблюжьей-кафкой версии 2.14.3. Ниже URI kafka:

<from uri="kafka:{brokerlist}?topic={topic-name}&amp;zookeeperHost={zookeeperHost}&amp;zookeeperPort={zookeeperPort}&amp;groupId={groupId-name}&amp;consumerStreams=2" />

обратите внимание, что я использовал consumerStream=2 в параметрах URI. Но когда я публикую sh несколько сообщений в топи c topic-name одновременно (все в одном разделе), потребитель kafka получает эти сообщения последовательно. Как можно получать эти сообщения параллельно?

Я ищу решение, как показано ниже:

<from uri="ibm_bean_name:queue_name?concurrentConsumers=2" /> 

- это то, что я использую для одновременного чтения из IBM MQ

Ответы [ 2 ]

1 голос
/ 21 апреля 2020

Раздел является единицей параллелизма Кафки. Каждый раздел будет назначен одному потребителю в данной группе потребителей. Вы сказали, что производите на один раздел. Это означает, что все сообщения будут go для одного потребителя, независимо от того, сколько потребителей у вас в группе. Если вы хотите, чтобы сообщения go передавались разным потребителям, вы должны создавать их для разных разделов.

0 голосов
/ 21 апреля 2020

Если у вас N разделов, вы можете иметь до N потребителей в одной и той же группе потребителей, каждый из которых читает из одного раздела. Если у вас меньше потребителей, чем у разделов, то некоторые из них будут читать из более чем одного раздела. Кроме того, если у вас больше потребителей, чем разделов, некоторые из них будут неактивны и вообще не будут получать сообщений.

Если у вас есть один потребитель на раздел, то некоторые разделы могут получать больше сообщений, и это Вот почему некоторые из ваших потребителей могут бездействовать, в то время как другие могут обрабатывать некоторые сообщения. Обратите внимание, что сообщения не всегда вставляются в разделы topi c циклически, поскольку сообщения с одинаковым ключом помещаются в один и тот же раздел.

...