Kafka, группы используются только при чтении?
1. Группы при чтении
Когда потребители читают сообщения из Kafka, они могут быть организованы в группы. Группы потребителей позволяют:
- Распределить нагрузку: Разделить партиции топика между потребителями в группе.
- Обеспечить эксклюзивный доступ: Каждая партиция назначается только одному потребителю в группе.
- Обработать сообщения только один раз: Группа потребителей гарантирует, что каждое сообщение обрабатывается ровно одним потребителем внутри группы.
Пример:
Если топик имеет 3 партиции, а группа потребителей состоит из 3 потребителей, то каждый потребитель будет читать только из одной партиции.
2. Почему группы не используются при записи
Kafka использует принцип декларативной ответственности, где продюсер отвечает только за отправку сообщений, а распределение нагрузки или маршрутизация происходит на стороне брокера. Продюсеры не заботятся о группах, поскольку:
- Запись сообщений независима от потребителей: Продюсер просто отправляет сообщения в заданный топик (и, возможно, в определённую партицию, если это явно указано). Ему не нужно знать, как сообщения будут обрабатываться.
- Детали обработки — задача потребителей: Именно потребители решают, как организовать обработку сообщений. Если необходимо распределить обработку, они объединяются в группы.
- Фокус на простоте и производительности: Продюсеры сконцентрированы на производительности записи сообщений и обеспечении высокой пропускной способности, а не на управлении состоянием или маршрутизации сообщений для потребителей.
Пример:
При записи в Kafka топик:
- Сообщение отправляется в топик и, если нужно, в конкретную партицию.
- Kafka не учитывает, какие группы потребителей существуют или кто будет читать сообщение.
3. Как распределяются сообщения при записи
Продюсер в Kafka может записывать сообщения в партиции топика следующими способами:
- Автоматически: Если не указана партиция, Kafka использует алгоритм round-robin (по кругу), чтобы распределять сообщения между партициями.
- С ключом: Если сообщение содержит ключ, Kafka использует хэш ключа для определения партиции. Это позволяет обеспечить, что все сообщения с одинаковым ключом попадут в одну партицию.
- Явно заданная партиция: Продюсер может напрямую указать, в какую партицию записывать сообщение.
4. Итог
- Группы потребителей — это механизм, предназначенный только для чтения и обработки сообщений, чтобы распределить нагрузку или добиться отказоустойчивости.
- При записи группы не используются, так как продюсер сосредоточен на отправке данных в топик, а не на том, как эти данные будут обрабатываться.
Если у вас сценарий, в котором кажется, что нужны группы при записи, это, скорее всего, намёк на переработку архитектуры, чтобы такие задачи решались потребителями.
Recommended Posts
Golang Sarama: настройка Partitioner
20.03.2024