Sobes.tech
Back to questions
Senior
7

Как сделать, чтобы читатели Kafka получали сообщения в том же порядке, в котором они записывались?

Companies where asked
.wrk

Answer from AI

sobes.tech AI

Чтобы гарантировать, что читатели Kafka получают сообщения в том же порядке, в котором они были записаны, нужно учитывать следующие моменты:

  • Использовать один и тот же partition для связанных сообщений. Порядок сообщений гарантируется только внутри одного partition.
  • Использовать ключи сообщений (message keys). При отправке сообщений с одинаковым ключом Kafka направит их в один partition, сохраняя порядок.
  • Читать из partition последовательно. Консьюмер должен обрабатывать сообщения из partition в порядке их offset.

Пример на C# с использованием Confluent.Kafka:

var config = new ConsumerConfig
{
    GroupId = "my-group",
    BootstrapServers = "localhost:9092",
    AutoOffsetReset = AutoOffsetReset.Earliest
};

using var consumer = new ConsumerBuilder<Ignore, string>(config).Build();
consumer.Subscribe("my-topic");

while (true)
{
    var consumeResult = consumer.Consume();
    Console.WriteLine($"Received message at offset {consumeResult.Offset}: {consumeResult.Message.Value}");
    // Обработка сообщений в порядке поступления
}

Важно: если у вас несколько партиций, порядок гарантируется только внутри каждой партиции, но не между ними.