Upload
ontico
View
228
Download
5
Embed Size (px)
Citation preview
Kafka в условиях повышенной нагрузкиВыборнов Артём, Rambler&Co
Чем мы занимаемся?
• Сегментация аудитории• Эвристики• Классификация• Lookalike
• Прогноз трафика• Предсказание CTR• Аналитика• Рекомендации• ...
Было
Было
Было
Было
Стало
Стало
Стало
Kafka в условиях повышенной нагрузки
• Как обеспечить семантику exactly once?
Kafka в условиях повышенной нагрузки
• Как обеспечить семантику exactly once?• Какие существуют узкие места?
Kafka в условиях повышенной нагрузки
• Как обеспечить семантику exactly once?• Какие существуют узкие места?• Какие метрики стоит мониторить?
Архитектура Kafka
Архитектура топика Kafka
Архитектура топика Kafka
Архитектура топика Kafka
Репликация
Репликация
Переизбрание лидеров
Переизбрание лидеров
• С потерями данных (Unclean leader election)• “Без потерь” данных (Clean leader election)
Переизбрание лидеров
• С потерями данных (Unclean leader election) — Δ > const• “Без потерь” данных (Clean leader election) — Δ < const
Переизбрание лидеров
• В любом случае теряете данные
Переизбрание лидеров
• В любом случае теряете данные• Переизбрание может происходить когда всё идёт хорошо
Переизбрание лидеров (без потерь)
(producer) request.required.acks = 0
(producer) request.required.acks = 1
Переизбрание лидеров (без потерь)
(producer) request.required.acks = -1
(kafka) min.insync.replicas.per.topic = topic:1
Переизбрание лидеров (без потерь)
(producer) request.required.acks = -1
(kafka) min.insync.replicas.per.topic = topic:2
Переизбрание лидеров (без потерь)
Переизбрание лидеров (без потерь)
• Нельзя писать в партицию, если количество живых реплик меньше числа insync.replicas
Переизбрание лидеров (без потерь)
• Нельзя писать в партицию, если количество живых реплик меньше числа insync.replicas
• Решение:• insync.replicas = 2• replication factor = 3
Отступы
Отступы
Сохранение отступов
• Автоматическое сохранение
• Сохранение вручную (at least once)
Сохранение отступов
Сохранение отступов
• Сохранение вне Kafka (возможность exactly once)
Сохранение в HDFS (exactly once)
1. hdfs dfs -mv /tmp/file1 /logs/file2. hdfs dfs -mv /tmp/file2 /logs/file3. hdfs dfs -mv /tmp/offsets /runtime/offsets
Всё хорошо
• Producer получает ответ об успешной записи данных• Kafka реплицирует данные• Consumer атомарно сохраняет данные и отступы
Но начались проблемы
• Запаздывание логов
• Дубли сообщений (at least once)
Проблемы consumer’ов
• Медленная работа consumer’а на микробатчах
Проблемы consumer’ов
• Медленная работа consumer’а на микробатчах• Падения consumer’ов с ошибками:
• Не могу получить лидеров• Не могу получить отступы
Проблемы consumer’ов
• Медленная работа consumer’а на микробатчах• Падения consumer’ов с ошибками:
• Не могу получить лидеров• Не могу получить отступы
• Причина: Kafka медленно отвечает на простейшие запросы• Отдельные ноды отвечают по несколько минут
Выросла нагрузка на чтение
• 150 MByte/s → 600 MByte/s
600 MB/s
150 MB/s
Неравномерное распределение нагрузки
• Нагрузка на чтение в разрезе нод
150 MB/s
Неравномерное распределение нагрузки
• Неравномерно распределены партиции• Неравномерно распределены лидеры
Неравномерное распределение нагрузки
• Даже при нормальной работе кластера Kafka ошибается
Неравномерное распределение нагрузки
• Даже при нормальной работе кластера Kafka ошибается• Распределяем руками
Неравномерное распределение нагрузки
• Повышаем репликацию
Неравномерное распределение нагрузки
• Повышаем репликацию
• Повышаем репликацию
Неравномерное распределение нагрузки
• Повышаем репликацию• Помогаем Kafka не ошибаться
Неравномерное распределение нагрузки
Классические проблемы
• Сеть — часть нод в стойке с 1Gb uplink
Классические проблемы
• Сеть — часть нод в стойке с 1Gb uplink • Диски — Kafka не дружит с RAID 5
В итоге
• Равномерно размазали нагрузку по нодам• Все ноды в стойках с 10Gb uplink• Не используем RAID 5• Kafka стала отвечать за разумное время• Нагрузка осталась высокой
Разгадка
• Повторное скачивание данных (at least once)
Разгадка
• Повторное скачивание данных (at least once)
• Отступы всех топиков camus попали в одну папку• Иногда терялись отступы после успешного фетча• Иногда успешно обновлялись
• Нагрузка на чтение
Было
600 MB/s
• Нагрузка на чтение
Стало
150 MB/s
Немного цифр
Мониторинг
• Узкие места• Сеть• Диски• Распределение нагрузки по нодам• Распределение лидеров толстых топиков
• Нагрузка на чтение в разрезе нод
Мониторинг
150 MB/s
Мониторинг
• Узкие места• Сеть• Диски• Распределение нагрузки по нодам• Распределение лидеров толстых топиков
• Переизбрание лидеров
Мониторинг
• Узкие места• Сеть• Диски• Распределение нагрузки по нодам• Распределение лидеров толстых топиков
• Переизбрание лидеров• Рассинхронизация партиций
• Число несинхронных партиций (UnderReplicatedPartitions)• Максимальный лаг репликации (ReplicaFetcherManager.MaxLag)
• Максимальный лаг репликации
Мониторинг
20 K
0
Мониторинг
• Узкие места• Сеть• Диски• Распределение нагрузки по нодам• Распределение лидеров толстых топиков
• Переизбрание лидеров• Рассинхронизация партиций
• Число несинхронных партиций (UnderReplicatedPartitions)• Максимальное отставание (ReplicaFetcherManager.MaxLag)
• Время ответа на простейшие запросы
• Время ответа на запросы consumer’а
Мониторинг
10 s
Kafka в условиях повышенной нагрузки
• Exactly once это про все элементы pipeline: producer, consumer, Kafka
Kafka в условиях повышенной нагрузки
• Exactly once это про все элементы pipeline: producer, consumer, Kafka
• Узкие места: сеть, диски, баланс нагрузки
Kafka в условиях повышенной нагрузки
• Exactly once это про все элементы pipeline: producer, consumer, Kafka
• Узкие места: сеть, диски, баланс нагрузки• Стоит также мониторить: переизбрание лидеров,
отставание партиций, время ответа
Выборнов Артём• Почта: [email protected]• Рабочая почта: [email protected]