Apache Kafka — это распределенный, масштабируемый, высокопроизводительный брокер сообщений публикации и подписки. Вот руководство для начинающих, которое знакомит с архитектурой и концепциями Kafka, а также с примерами C#.

Архитектура:

  • Kafka состоит из кластера из одного или нескольких брокеров, отвечающих за поддержание состояния распределенной системы.
  • Производители – это приложения, которые отправляют сообщения в одну или несколько тем брокера.
  • Потребители — это приложения, которые подписываются на одну или несколько тем и обрабатывают полученные сообщения.
  • Темы – это категории сообщений, на которые могут публиковаться производители, а на которые могут подписываться потребители.
  • Разделы – это способ горизонтального масштабирования тем. Каждый раздел представляет собой упорядоченную неизменяемую последовательность сообщений, хранящуюся на одном посреднике.

Концепции:

  • Публикация-подписка: производители публикуют сообщения в темах, а потребители подписываются на темы, чтобы получать сообщения.
  • Темы и разделы. Темы — это категории для сообщений, а разделы — это способы их горизонтального масштабирования.
  • Брокер: кластер из одного или нескольких серверов, поддерживающих состояние распределенной системы.
  • Группа потребителей: группа потребителей, которые работают вместе, чтобы потреблять сообщения из темы.
  • Смещение: уникальный идентификатор сообщения в разделе.

Для связи с использованием шины сообщений Kafka вам необходимо настроить шину Kafka. Следуйте здесь для получения инструкций по настройке.

Пример С#:

Вот пример того, как создавать и использовать сообщения с помощью пакета Confluent.Kafka NuGet на C#.

Создание сообщений:

using Confluent.Kafka;
var config = new ProducerConfig { BootstrapServers = "localhost:9092" };
using (var producer = new ProducerBuilder<Null, string>(config).Build())
{
    try
    {
        var result = producer.ProduceAsync("my-topic", new Message<Null, string> { Value = "Hello, Kafka!" }).Result;
        Console.WriteLine($"Message produced to partition: {result.Partition}, offset: {result.Offset}");
    }
    catch (ProduceException<Null, string> e)
    {
        Console.WriteLine($"Delivery failed: {e.Error.Reason}");
    }
}

Использование сообщений:

using Confluent.Kafka;
var config = new ConsumerConfig
{
    GroupId = "my-group",
    BootstrapServers = "localhost:9092",
    AutoOffsetReset = AutoOffsetReset.Earliest
};
using (var consumer = new ConsumerBuilder<Null, string>(config).Build())
{
    consumer.Subscribe("my-topic");
    try
    {
        while (true)
        {
            var message = consumer.Consume();
            Console.WriteLine($"Message consumed from partition: {message.Partition}, offset: {message.Offset}, value: {message.Value}");
        }
    }
    catch (ConsumeException e)
    {
        Console.WriteLine($"Error occured: {e.Error.Reason}");
    }
}

Это всего лишь базовый пример для начала работы с Kafka на C#. Для более сложных тем, таких как сериализация, обработка ошибок и конфигурация, вы можете обратиться к документации Confluent.Kafka.

Смотрите также

Примечание. Эта история создана с использованием вспомогательных инструментов искусственного интеллекта.