TGViewer
Женя Янченко Женя Янченко @jane_yanchenko · 5.51K subscribers
Post #243 3.81K
Kafka Producers

Продолжаем серию постов про Кафку.

✉️ Структура сообщения

Сообщение может содержать:

Заголовки — это метаданные в формате ключ-значение. Кафка автоматически добавляет несколько заголовков по-умолчанию (например, TOPIC, PARTITION, TIMESTAMP), но мы тоже можем добавить свои данные в заголовки для передачи какой-то дополнительной информации.

Ключ — это необязательное поле, которое нужно для следующих целей:
➡️ на основе ключа определяется, в какую партицию топика записывать сообщение
➡️ если топик работает в режиме COMPACT, то сообщения с одинаковым ключом будут схлопнуты в одно, самое последнее
➡️ ключ может нести дополнительную информацию

Значение — сами данные, которые передаются. Например, сообщение о событии в формате JSON.

🔍 Определение партиции

➡️ Если ключа нет, то партиция определяется случайным образом, но переключение осуществляется не для каждого сообщения без ключа, а по пакетам: наполняется пакет сообщений, отправляемый в одну партицию, затем следующий пакет для следующей партиции и т.д.

➡️ Если ключ есть, то по-умолчанию Kafka вычисляет хэш ключа и на основании значения хэша определяет партицию для сообщения. Таким образом, все сообщения с одинаковым ключом будут отправляться в одну партицию. Это важно, так как Кафка обеспечивает порядок сообщений только в рамках партиции.

Например, мы отправляем сообщения о действиях пользователей. Выберем ключом userId.
Допустим, количество партиций = 3. Тогда:

hash("user123") % 3 → номер партиции

Все сообщения с userId = "user123" будут отправлены в одну и ту же партицию.

Но если мы увеличим число партиций, например, до 10, тогда:

hash("user123") % 10 → другой номер партиции

После увеличения количества партиций старые сообщения с userId = "user123" останутся в одной партиции, а новые могут попасть уже в другую.


➡️ Своя логика определения партиции
Кафка позволяет написать собственную логику определения партиции.

➡️ Прямое указание партиции
При отправке сообщения в продюсере можно явно задать номер партиции.

На практике последние два варианта не встречала, кажется, что это может пригодиться только для особых случаев.

Продолжение ⬇️
  • ❤ 18
  • 👍 13
  • ❤‍🔥 6
  • 🔥 5
  • 😁 1
More from @jane_yanchenko
  1. Sep 21, 2026🔗 Подборка постов про Кафку Как обещала на стриме, собрала посты про Кафку в удобное огла…
  2. Sep 21, 2026🎞 Готова запись стрима про Кафку: https://youtu.be/2aRKsD-MWDA Большое спасибо всем, кто…
  3. Sep 16, 2026Сегодня стрим по Кафке в 19:00 Планируем не в формате доклада, а в формате вопрос-ответ, ч…
  4. Sep 16, 2026Post #413
  5. Sep 16, 2026Post #412
  6. Sep 16, 2026Post #411
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →