digital-garden/_inbox/00 Kafka.md

6.5 KiB
Raw Blame History

aliases tags date zero-link linked
кафка
kafka
type/moc
2024-07-02
2024-07-02
00 Архитектура ПО

Apache Kafka это платформа потоковой передачи, которую можно использовать для быстрой обработки большого количества событий. Строго говоря это не Брокер сообщений, а распределенный реплицированный журнал фиксаций изменений (commit log).

Где встречается потребности в потоковой обработке:

  • Финансовые транзакции
  • Аналитика
    • Действия в онлайн магазинах
    • Перемещения пользователей
  • Социальные сети
  • Промышленные датчики

Характеристики:

  • Гарантия доставки
  • Репликация журнала и синхронизация реплик
  • Уведомление о смещении (offset) получателя
  • Уведомление о получении сообщения
  • Хранит свои записи на диске и не использует RAM. Использует кэш диска
  • Операции считывания и записи выполняются за константное время.
  • Реализует последовательное чтение и запись на диск
  • Работает через pull модель. Consumer сам должен опрашивать кафку.

В отличии от RabbitMQ кафка не реализует какой-то роутинг внутри. Предполагается, что за это отвечает consumer.

Терминология:

  • Record - запись состоящая из ключа и значения
  • Topic - имя потока, куда публикуются Record
  • Offset - позиция записи
  • Pratition - шард топика

Доставка сообщений в Kafka может осуществляться как минимум тремя способами:

  • не менее одного раза (at-least-once) сообщение будет отправляется потребителям до тех пор, пока те не подтвердят его получение;
  • не более одного раза (at-most-once) сообщение отправляется только один раз и в случае сбоя не отправляется повторно;
  • точно один раз (exactly-once) потребитель гарантированно получит сообщение ровно один раз.

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

Платформа Kafka изначально была ориентирована на работу с несколькими потребителями. Это означает, что приложение, читающее сообщение из брокера сообщений, не делает это сообщение недоступным для других приложений, которые также могут захотеть его получить и использовать.

Сообщение, также называемое записью, является основной частью данных, проходящих через Kafka. Сообщения это представление ваших данных в Kafka. Каждое сообщение имеет отметку времени, значение и необязательный ключ. При желании также можно добавлять свои заголовки

Заметки

  • Реализована на Java
  • Не использует RAM для доступа к данным.
  • Отправленные сообщения не удаляются после прочтения.
    • Позволяет повторно считать данные с любого места. Например, мы выполняли какую-то бухгалтерскую логику и поняли, что в приложении была допущена ошибка в формуле расчета. Мы можем удалить невалидные данные, поправить формулу и заново считать все старые сообщения.
    • Можно настроить ротацию, чтобы старые сообщения удалялись.
  • Для улучшения производительности желательно под кафку выделять отдельные жесткие диски. Менее актуально для SSD.
  • Есть возможность сжатия данных в топике. Аля архивация.
  • Использует zookeeper для хранения мета-данных. В новых версиях может уже не использовать.
    • Хранит offset значения продюсеров.
  • Может обработать 30000 сообщений в секунду
  • Производительнее, чем RabbitMQ

Дополнительно

sudo docker run -p 9000:9000 -e ZK_HOSTS="10.21.21.14:2181" sheepkiller/kafka-manager