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

Брокер сообщений Kafka в условиях повышенной нагрузки

Брокер сообщений Kafka в условиях повышенной нагрузки

Kafka - распределённый брокер сообщений, нашедший широкое применение как универсальная шина для больших данных. Kafka позволяет как реализовать realtime-обработку большого числа событий, так и построить батчевый pipeline по доставке логов.

Почему мы используем Kafka? Если коротко - унификация. А если чуть подробнее - десятки поставщиков, терабайты логов каждый день, онлайн- и офлайн-pipeline'ы - без единой высокопроизводительной шины данных с этим крайне сложно совладать.

Из доклада вы узнаете о том, почему мы перешли на Kafka, и как она вписалась в наш pipeline. Поймёте, как обеспечить exactly once доставку данных. Узнаете о том, как из-за одной опечатки в несколько раз выросла нагрузка на Kafka, и что мы из этого выяснили. Выясните, какие метрики Kafka стоит мониторить и как по ним понять, что что-то идёт не так.

Artyom Vybornov

June 22, 2017
Tweet

More Decks by Artyom Vybornov

Other Decks in Programming

Transcript

  1. Чем мы занимаемся? • Сегментация аудитории • Эвристики • Классификация

    • Lookalike • Прогноз трафика • Предсказание CTR • Аналитика • Рекомендации • ...
  2. Kafka в условиях повышенной нагрузки • Как обеспечить семантику exactly

    once? • Какие существуют узкие места? • Какие метрики стоит мониторить?
  3. Переизбрание лидеров • С потерями данных (Unclean leader election) —

    Δ > const • “Без потерь” данных (Clean leader election) — Δ < const
  4. Переизбрание лидеров (без потерь) • Нельзя писать в партицию, если

    количество живых реплик меньше числа insync.replicas
  5. Переизбрание лидеров (без потерь) • Нельзя писать в партицию, если

    количество живых реплик меньше числа insync.replicas • Решение: • insync.replicas = 2 • replication factor = 3
  6. Сохранение в HDFS (exactly once) 1. hdfs dfs -mv /tmp/file1

    /logs/file 2. hdfs dfs -mv /tmp/file2 /logs/file 3. hdfs dfs -mv /tmp/offsets /runtime/offsets
  7. Всё хорошо • Producer получает ответ об успешной записи данных

    • Kafka реплицирует данные • Consumer атомарно сохраняет данные и отступы
  8. Проблемы consumer’ов • Медленная работа consumer’а на микробатчах • Падения

    consumer’ов с ошибками: • Не могу получить лидеров • Не могу получить отступы
  9. Проблемы consumer’ов • Медленная работа consumer’а на микробатчах • Падения

    consumer’ов с ошибками: • Не могу получить лидеров • Не могу получить отступы • Причина: Kafka медленно отвечает на простейшие запросы • Отдельные ноды отвечают по несколько минут
  10. Классические проблемы • Сеть — часть нод в стойке с

    1Gb uplink • Диски — Kafka не дружит с RAID 5
  11. В итоге • Равномерно размазали нагрузку по нодам • Все

    ноды в стойках с 10Gb uplink • Не используем RAID 5 • Kafka стала отвечать за разумное время • Нагрузка осталась высокой
  12. Разгадка • Повторное скачивание данных (at least once) • Отступы

    всех топиков camus попали в одну папку • Иногда терялись отступы после успешного фетча • Иногда успешно обновлялись
  13. Мониторинг • Узкие места • Сеть • Диски • Распределение

    нагрузки по нодам • Распределение лидеров толстых топиков
  14. Мониторинг • Узкие места • Сеть • Диски • Распределение

    нагрузки по нодам • Распределение лидеров толстых топиков • Переизбрание лидеров
  15. Мониторинг • Узкие места • Сеть • Диски • Распределение

    нагрузки по нодам • Распределение лидеров толстых топиков • Переизбрание лидеров • Рассинхронизация партиций • Число несинхронных партиций (UnderReplicatedPartitions) • Максимальный лаг репликации (ReplicaFetcherManager.MaxLag)
  16. Мониторинг • Узкие места • Сеть • Диски • Распределение

    нагрузки по нодам • Распределение лидеров толстых топиков • Переизбрание лидеров • Рассинхронизация партиций • Число несинхронных партиций (UnderReplicatedPartitions) • Максимальное отставание (ReplicaFetcherManager.MaxLag) • Время ответа на простейшие запросы
  17. Kafka в условиях повышенной нагрузки • Exactly once это про

    все элементы pipeline: producer, consumer, Kafka • Узкие места: сеть, диски, баланс нагрузки
  18. Kafka в условиях повышенной нагрузки • Exactly once это про

    все элементы pipeline: producer, consumer, Kafka • Узкие места: сеть, диски, баланс нагрузки • Стоит также мониторить: переизбрание лидеров, отставание партиций, время ответа