Sobes.tech
Middle
42

Kafka: как сделать так, чтобы одно сообщение из топика прочитали два разных сервиса?

Сұралған компаниялар
RedLab

AI-дан жауап

sobes.tech AI

Чтобы одно сообщение из Kafka топика прочитали два разных сервиса, нужно, чтобы эти сервисы были в разных группах потребителей (consumer groups). В Kafka сообщения доставляются каждому consumer group независимо, а внутри группы — каждому сообщению соответствует один потребитель.

Пример:

  • Сервис A — consumer group "serviceA-group"
  • Сервис B — consumer group "serviceB-group"

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

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "serviceA-group"); // или "serviceB-group" для второго сервиса
props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
consumer.subscribe(Collections.singletonList("your-topic"));
// далее обработка сообщений

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