Sobes.tech
Back to questions
Senior
3

Каким образом несколько инстансов ACL-сервиса принимают сообщения из Kafka?

Companies where asked
СБЕРСБЕР

Answer from AI

sobes.tech AI

Несколько инстансов ACL-сервиса, потребляющих сообщения из Kafka, обычно объединяются в одну consumer group. Kafka гарантирует, что каждое сообщение из топика будет обработано ровно одним инстансом в группе, распределяя партиции между ними. Таким образом, если у вас, например, 3 инстанса и 6 партиций, Kafka распределит партиции между инстансами, обеспечивая параллельную обработку и балансировку нагрузки.

Пример на Java с использованием KafkaConsumer:

Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("group.id", "acl-service-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("acl-topic"));

while (true) {
    ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
    for (ConsumerRecord<String, String> record : records) {
        // Обработка сообщения
    }
}

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