Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Виктор Корейша — Cамые распространенные ошибки ...

Ozon Tech
December 12, 2022

Виктор Корейша — Cамые распространенные ошибки при работе с Apache Kafka

Ozon Tech

December 12, 2022
Tweet

More Decks by Ozon Tech

Other Decks in Technology

Transcript

  1. Ozon Tech 2022 Cамые распространенные ошибки при работе с Apache

    Kafka Виктор Корейша, руководитель отдела Message Bus
  2. 2 • Руковожу отделом Message Bus в Ozon Tech •

    Член программного коммитета конференции Ural Digital Weekend • Веду подкаст «Кода кода» 
 https:/ /podcast.ru/1551786898 Пара слов обо мне Виктор Корейша
  3. Сегодня мы поговорим о…. Как работает Apache Kafka: базовое устройство,

    термины Распространенные ошибки в параметрах и настройке Распространенные ошибки в архитектуре и использовании 3
  4. Будет полезно Тем, кто только начинает работать с Kafka Тем,

    кто уже работает, но не погружался в детали Тем, кто согласился, что Kafka — это менеджер очередей 5 ?
  5. События 8 2. Заказ №1 Собран item №1 3. Заказ

    №1 Собран item №2 4. Заказ №1 Доставлен 5. Заказ №1 Отгружен 1. Заказ №1 Поступил в работу
  6. Использование событий 1. Складской учет 
 2. Бухгалтерские системы 


    3. Системы учета рабочего времени 
 4. Системы трекинга 
 5. … 2. Заказ №1 Собран item №1 3. Заказ №1 Собран item №2 4. Заказ №1 Доставлен 5. Заказ №1 Отгружен 1. Заказ №1 Поступил в работу
  7. Партиция 2. Заказ №1 Собран item №1 3. Заказ №1

    Собран item №2 1. Заказ №1 Поступил в работу Продюсер Консьюмер 
 Бухгалтерия Консьюмер 
 Складской учет
  8. Топик 2. Заказ №1 Собран item №1 4. Заказ №1

    Собран item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер
  9. Топик 2. Заказ №1 Собран item №1 4. Заказ №1

    Собран item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер
  10. Топик 2. Заказ №1 Собран item №1 4. Заказ №1

    Собран item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер
  11. 2. Заказ №1 Собран item №1 4. Заказ №1 Собран

    item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер Консьюмер-группа Складской учет Консьюмер #1 Консьюмер #2 Консьюмер-группа Бухгалтерия Консьюмер #1
  12. 2. Заказ №1 Собран item №1 4. Заказ №1 Собран

    item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер Консьюмер-группа Складской учет Консьюмер #1 Консьюмер #2 Консьюмер-группа Бухгалтерия Консьюмер #1
  13. 2. Заказ №1 Собран item №1 4. Заказ №1 Собран

    item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер 0 1 2 Офсет 0 1 2 Партиция Консьюмер- группа Бухгалтерия Консьюмер- группа Склад
  14. Партиция 0 1 2 Продюсер 2 1 2 Консьюмер-группа склад

    2 1 0 Консьюмер-группа бухгалтерия 2 1 0 Офсеты 2. Заказ №1 Собран item №1 4. Заказ №1 Собран item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер 0 1 2 Офсет 0 1 2 Партиция
  15. 1. Producer — источник появления данных 2. Consumer — потребитель

    данных 3. Topic — Наименование потока данных, в котором кафка хранит сообщения на определенную тему 4. Partition — Дополнительный логический блок используемый для параллельной вычитки сообщений 5. O ff set — Cообщение записанное в партицию Термины 21
  16. Внутреннее устройство 23 Брокер 1 Партиция 0 Брокер 2 Партиция

    1 Брокер 3 Партиция 2 Партиция 3 Партиция 0 Партиция 0 Партиция 1 Партиция 1 Партиция 2 Партиция 2 Партиция 3 Партиция 3
  17. Внутреннее устройство 24 Брокер 1 Партиция 0 Брокер 2 Партиция

    1 Брокер 3 Партиция 2 Партиция 3 Партиция 0 Партиция 0 Партиция 1 Партиция 1 Партиция 2 Партиция 2 Партиция 3 Партиция 3
  18. 1. Kafka Broker — приложение написанное на языке java 2.

    Kafka Cluster — логическое объединение kafka брокеров 3. Leader — Партиция из которой осуществляется вычитка и запись 4. Replica — Копия лидер партиции, используется для обеспечения резервирования Термины 25
  19. Сообщения в Kafka не удаляются брокерами по мере их обработки

    консьюмерами — данные в Kafka могут храниться днями, неделями, годами. Благодаря этому одно и то же сообщение может быть обработано сколько угодно раз разными консьюмерами и в разных контекстах. 28
  20. 29 Retention Policy 1. Ограничиваем по размеру • retention.bytes •

    Type: long • Default: -1 (без ограничений) • Max: 9223372036854775807
  21. 30 Retention Policy 1. Ограничиваем по размеру • retention.bytes •

    Type: long • Default: -1 (без ограничений) • Max: 9223372036854775807 2. Ограничиваем по времени • retention.ms • Type: long • Default: 604800000 (7 дней) • Min: -1 • Max: 9223372036854775807
  22. 31 Retention Policy 1. Ограничиваем по размеру • retention.bytes •

    Type: long • Default: -1 (без ограничений) • Max: 9223372036854775807 2. Ограничиваем по времени • retention.ms • Type: long • Default: 604800000 (7 дней) • Min: -1 • Max: 9223372036854775807 Cleanup Policy 1. Delete • Удалять сегменты либо при истечении срока их хранения, либо при достижении предельного размера 2. Compact • Включает log compaction, который сохраняет последнее значение для каждого ключа
  23. Продюсер обеспечивает надежность данных с помощью параметра конфигурации acks: •

    none • one • all Запись 34 Продюсер Подтверждение Сообщение Лидер Реплика Реплика
  24. Конфигурация min.insync.replicas задает число реплик, которые должны быть синхронизированы, чтобы

    можно было продолжить запись Запись 35 Продюсер Подтверждение Сообщение Лидер Реплика Реплика
  25. 38 Каким образом мы можем обозначить сообщения в партиции, как

    обработанные? 2. Заказ №1 Собран item №1 4. Заказ №1 Собран item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер
  26. 39 Каким образом мы можем обозначить сообщения в партиции, как

    обработанные? Кафка сохраняет офсеты в отдельном топике 2. Заказ №1 Собран item №1 4. Заказ №1 Собран item №2 1. Заказ №1 Поступил в работу 5. Заказ №3 Поступил в работу 7. Заказ №3 Собран item №4 3. Заказ №2 Поступил в работу 6. Заказ №2 Собран item №3 8. Заказ №2 Собран item №3 Продюсер
  27. Накладные расходы на пакетную запись постоянны и не поддаются уменьшению

    (record batch overhead) Батчинг 43 Продюсер Сообщение (50 байт) Брокер Bach Overhead (61 байт) Сообщение (50 байт) Bach Overhead (61 байт) Сообщение (50 байт) Bach Overhead (61 байт)
  28. linger.ms — задает верхнюю границу задержки batch.size — размер пакета,

    который будет отправлен сразу Бачинг 44 Продюсер Сообщение (50 байт) Сообщение (50 байт) Сообщение (50 байт) Брокер Bach Overhead (61 байт)
  29. Apache Kafka поддерживает различные алгоритмы сжатия Сжатие 45 Сжатие на

    продюсере Сжатие на брокере compression.type gzip, snappy, lz4 и zstd gzip, snappy, lz4 и zstd Сеть Нагрузка снижается Не меняется Место на диске Меньше места на диске Меньше места на диске Ресурсы Процессор продюсера (скейлится) Процессор брокера (ограничен в скейлинге)
  30. Батчинг + сжатие 46 Продюсер Сообщение (50 байт) Брокер Bach

    Overhead (61 байт) Продюсер Сжатые данные (30 байт) Брокер Bach Overhead (61 байт) Сообщение (50 байт) Bach Overhead (61 байт) Сжатые данные (30 байт) Bach Overhead (61 байт)
  31. Батчинг + сжатие 47 Продюсер Сообщение (50 байт) Сообщение (50

    байт) Сообщение (50 байт) Брокер Bach Overhead (61 байт) Продюсер Сжатые данные (70 байт) Брокер Bach Overhead (61 байт)
  32. Чем больше батч, тем эффективнее сжатие 48 Сжатие одного сообщения

    Сжатие бача Размер сообщения 90-220 байт - Суммарный размер 50МБ 50МБ Размер после сжатия (gzip) 41МБ 11МБ Эффективность сжатия 21 % 354 %
  33. Каждый консюмер в группе принимает сообщения от одной или нескольких

    партиций в топике. Консьюмеры 52 Партиция 1 Топик Партиция 2 Партиция 3 Партиция 4 Партиция 5 Партиция 6 Консьюмер №1 Консьюмер №2 Консьюмер №3
  34. Если консьюмер выбывает, происходит ребалансировка Консьюмеры 53 Партиция 1 Топик

    Партиция 2 Партиция 3 Партиция 4 Партиция 5 Партиция 6 Консьюмер №1 Консьюмер №2 Консьюмер №3
  35. Ребалансировка Каждый консюмер лишается назначенных партиций и ничего не обрабатывает,

    пока их не назначат обратно Поэтому иногда такую ребалансировку называют stop-the-world 54
  36. Каждый консьюмер использует два потока: поток пользователя и «нить серцебиения»

    • Если не удается получить контрольный сигнал от консьюмера до истечения session.timeout.ms, запускается раунд ребалансировки 
 • Частота с которой консьюмеры сообщают о работоспособности задается в heartbeat.interval.ms 
 • max.poll.interval.ms — время, в течение которого 
 консьюмер может бездействовать, прежде чем получить дополнительные записи. Как брокер понимает, что консьюмер выбыл? 55
  37. 56 Ошибки: • Занижать эти интервалы. • Блокировать «серцебиение» со

    стороны консьюмера. • Слишком тяжеловесные консьюмеры
  38. Почему лучше делать по одной группе на каждый топик? Одна

    консьюмер-группа, чтоб править всеми 58
  39. Каждый консюмер в группе принимает сообщения от одной или нескольких

    партиций в топике. Консьюмеры 59 Топик Топик Топик Консьюмер-группа
  40. Каждый консюмер в группе принимает сообщения от одной или нескольких

    партиций в топике. Консьюмеры 60 Топик Топик Топик Консьюмер-группа
  41. Категории ошибок Исправимые ошибки Корневая причина — внешняя по отношению

    к сообщению и консюмеру 69 Неисправимые ошибки Все равно будут случаться, независимо от того, сколько раз мы попробуем повторно выполнить операцию Консьюмер Консьюмер Другие Так нейросеть изобразила прочие ошибки в очереди сообщений в стиле супрематизм
  42. Telegram: @koreysha Подкаст «Кода кода» https:/ /podcast.ru/1551786898 Спасибо за внимание

    Виктор Корейша, руководитель отдела Message Bus, Ozon Tech