Потребитель Spring Cloud Stream kafka, который привязан к нескольким темам


Я хочу настроить одно потребительское приложение (будет работать на одной JVM), которое будет привязано к нескольким темам.
Каждый метод «потребления» (скажем, у меня есть 2 темы для прослушивания) в потребительском приложении будет установлен с @StreamListener и будет связана с конкретной темой.
Также я настрою каждого потребителя в отдельную группу потребителей.

spring.cloud.stream.bindings.<consumer>.group=<group name>

Идея состоит в том, чтобы получать сообщения из нескольких тем, давайте примем все сообщения с одинаковым приоритетом, обработаем их и передадим в соответствующие микросервисы.

Как потребительское приложение будет вести себя в такой конфигурации?
Сообщения будут приходить одно за другим?
Мне нужно реализовать каждого листнера в отдельном потоке?
Хорош ли вообще такой подход?

Kafka версии 0.8.2.1 (спотифицируйте изображение)
Spring-cloud-stram Brixton.RELEASE
Спасибо.


person yuval simhon    schedule 29.11.2016    source источник
comment
Я не уверен в нескольких темах, но я почти уверен, что потребитель Kafka не может быть в нескольких группах одновременно.   -  person Aleksandar Stojadinovic    schedule 29.11.2016
comment
Я хочу настроить каждого потребителя Kafka на другую группу потребителей. например: тема sync_message будет установлена ​​с spring.cloud.stream.bindings.sync_message.group=sync_group, а тема update_db будет установлена ​​с spring.cloud.stream.bindings.update_db.group=db_group   -  person yuval simhon    schedule 29.11.2016


Ответы (1)


Как потребительское приложение будет вести себя в такой конфигурации? Сообщения будут приходить одно за другим? Мне нужно реализовать каждого листнера в отдельном потоке?

В выпуске Brixton каждый метод @StreamListener будет потреблять сообщения из отдельных потоков (вы увидите потоки: FetchTask из KafkaMessageListenerContainer для каждой привязки). Следовательно, потребление сообщений происходит между этими потоками, которые соответствуют потреблению сообщений из соответствующих тем.

person Ilayaperumal Gopinathan    schedule 29.11.2016
comment
То есть потоки FetchTask (Kafka-fetch) будут создаваться для каждой аннотации @Input? - person yuval simhon; 30.11.2016
comment
Да, это для каждой привязки потребителя. - person Ilayaperumal Gopinathan; 30.11.2016
comment
Кстати, есть рекомендуемый предел привязок для каждого приложения? - person yuval simhon; 30.11.2016
comment
Я думаю, это зависит от требований. Если вы можете обрабатывать частоту сообщений, используя несколько потоков внутри одного и того же приложения, вы можете включить столько привязок в одно и то же приложение. - person Ilayaperumal Gopinathan; 01.12.2016