
Apache Kafka очень производительный инструмент, который нужен для перенаправления потоков данных из одного места в другое, с обработкой и без. Проект достаточно зрелый и написан на Scala и Java, а среди тех, кто его активно использует, много гигантов IT индустрии: LinkedIn, Netflix, Yahoo, Twitter, Pinterest, и другие. Проект стал невероятно популярным во многом благодаря своим неоспоримым преимуществам: легкость настройки, масштабируемость, высокая пропускная способность и надежность.
В отличие от обычных брокеров, которые удаляют сообщения сразу же после успешной доставки, Kafka хранит их столько, сколько скажут. По умолчанию — это неделя. Это удобно, потому что, подписываясь на топик в Kafka можно получить и те сообщения, которые публиковались позавчера. Цифры попадаются разные, но Kafka превосходит по производительности многие популярные брокеры вроде ActiveMQ и RabbitMQ. По некоторым источникам зафиксированная пропускная способность Кафки: 100K сообщений в секунду, а у RabbitMQ всего 20К.
Ниже приведены некоторые преимущества Кафки:
- Надежность — Kafka тиражируется и отказоустойчива.
- Масштабируемость — система обмена сообщениями Kafka легко масштабируется без простоев.
- Долговечность — Kafka использует распределенный журнал фиксации, который означает, что сообщения сохраняются на диске настолько быстро, насколько это возможно, а значит, и долговечны.
- Производительность — Кафка обладает высокой пропускной способностью для публикации и подписки сообщений. Она поддерживает стабильную производительность даже при хранении многих ТБ сообщений. Она гарантирует нулевое время простоя и нулевую потерю данных.
Основные кейсы использования Kafka:
- Метрики. Кафку можно использовать для сбора метрик активности. Например, счетчики веб-сайта или физических датчиков. Производители могут публиковать необработанные данные из источников данных, которые впоследствии можно использовать для поиска тенденций и моделей.
- Сообщения. Также можно использовать как брокер сообщений сервисов. Если вы реализуете микросервисную архитектуру, вы можете иметь микросервис в качестве производителя, а другой - в качестве потребителя.
- Решение для агрегации журналов — Kafka может использоваться в рамках всей организации для сбора журналов от нескольких служб и предоставления их в стандартном формате нескольким потребителям.
- Потоковая обработка — популярные платформы, такие как Storm и Spark Streaming, считывают данные из темы, обрабатывают их и записывают обработанные данные в новую тему, где они становятся доступными для пользователей и приложений. Высокая прочность Kafka также очень полезна в контексте потоковой обработки.
Для того чтобы координировать работу всех своих брокеров в кластере Kafka используется ZooKeeper. Когда создаётся новый топик, или добавляется новый брокер, или удаляется старый, ZooKeeper — это тот, кто будет со всем этим разбираться. Он решит, куда положить новый топик, чем загрузить нового брокера, и даже как сбалансировать набор реплик, если часть из них ушла вместе с павшим сервисом. Он надсмотрщик и координатор, и его запускают первым.
Каждое сообщение, поступающее в систему, должно быть частью какого-либо топика (Topic). Топик - не что иное, как поток записей. Сообщения хранятся в формате ключ-значение. Каждому сообщению присваивается офсет. После потребитель (consumer) получает подписку на топик по своему выбору и потребляет данные.
Самый простой способ установить Kafka - это Docker. Ниже приведен пример конфига для docker-compose, который поднимет кафку на машине разработчика:
version: '2'
services:
kafka:
image: "wurstmeister/kafka:0.10.2.0"
ports:
- "9092:9092"
hostname: kafka
links:
- zookeeper
environment:
- KAFKA_ADVERTISED_HOST_NAME=kafka
- KAFKA_ZOOKEEPER_CONNECT=zookeeper:2181
- KAFKA_ADVERTISED_PORT=9092
- KAFKA_CREATE_TOPICS=topic1:1:1
zookeeper:
image: wurstmeister/zookeeper
ports:
- "2181:2181"
После чего достаточно задать команду:
docker-compose -f config.yml -p kafka up
И нам доступна кафка.