весенний облачный поток kafka

#apache-kafka #spring-cloud-stream

#apache-kafka #поток весеннего облака

Вопрос:

Я создал приложение Spring Cloud stream для производителей и kafka в качестве связующего. Вот приложение.yml:

 spring:
cloud:
  stream:
    instanceCount : 1
    bindings:
      output:
        destination: topic-sink
        producer:
           partitionSelectorClass: com.partition.CustomPartition
           partitionCount: 1        
...
  

У меня есть два экземпляра (одно и то же приложение, работающее на одной jvm) в качестве потребителей. Вот приложение.yml:

 spring:  
cloud:
  stream:
    bindings:
      input:
        destination: topic-sink
        group: hdfs-sink
        consumer:
          partitioned: true
...
  

Мое понимание групп kafka заключается в том, что сообщения будут использоваться только один раз для тех потребителей, которые находятся в одной группе. Допустим, если приложение-производитель выдает сообщения A, B и в одной группе есть два приложения-потребителя, сообщение A будет прочитано потребителем 1, а сообщения B, C будут прочитаны потребителем 2. Однако мои потребители используют одни и те же сообщения. Мои предположения неверны?

Комментарии:

1. Идея с группами потребителей заключается в том, что все потребители в этой группе будут использовать все события из заданной темы. Однако, если потребителей больше, чем разделов для этой темы, то N потребителей (где N #consumers - #partitions ) ничего не будут делать.

Ответ №1:

Я получил решение, спасибо Arek. Для 1 раздела и 1 потребителя. Я делюсь решением для производителя потребителя в приложении spring cloud stream. Продюсер:

spring:
cloud:
stream:
instanceCount : 1
bindings:
output:
destination: topic-sink
producer:
partitionSelectorClass: com.partition.CustomPartition
partitionCount: 1

Потребитель:

spring:
cloud:
stream:
instanceIndex: 0 #between 0 and instanceCount - 1
instanceCount: 1
bindings:
input:
destination: topic-sink
group: hdfs-sink
consumer:
partitioned: true
kafka:
binder:
autoAddPartitions: true