Apache Kafka как основа для велосипедостроения

Цель okmeter: найти проблему. Для этого нужен контент — метрики. Их собирает агент, отправляет в платформу и считает метрики.

Metric store v1: chunked

Результаты:

Metric store v1.1: bunched

Bunch — набор метрик, который пишется и читается одновременно. Пишем в один BLOB.

Metric store v2: идея!

Научиться хранить «хвост» данных в памяти надёжно.

Сможем хвост читать из этой памяти, а более давние данные — уже из Casssandra.

В результате начали изобретать велосипед. В любой БД есть WAL — write ahead log. Копим данные, а потом асинхронно пишем их, потому что сразу писать — дорого. Есть offset — какие данные мы уже записали.

Концепция такая:

В качестве WAL будем использовать kafka. Это просто надёжный лог. Producer в него пишет, а Consumer читает.

Преимущества kafka:

Как работает Consumer:

В okmeter использовали низкоуровневый интерфейс.

Если большой лаг или запрашивают диапазон больше чем у нас есть — ошибка.

In-memory storage: реузльтаты

Проблема: на полный потк метрик нужно 1,5 ядра на каждом инстансе

Long-term storage

Long-term storage: chunker

Long-term storage: chunks-writer

Результаты

Cassandra: 30000 → 150 writes/second.

Kafka в production

Рекомендации

Результат

Бонус: легкость экспериментов. * Можно выгрузить настоящие сырые данные * можно сесть на поток настоящих сырых данных * небольшой overhead на хранение * можно хранить много данных на дешёвых и больших дисках

Бонус: точка опоры

Итоги

Если вы хотите написать свою специализированную БД: