Обновление от 9 апреля 2018 г . : в настоящее время вы также можете использовать ksqlDB , базу данных потоковой передачи событий для Kafka, для обработки ваших данных в Kafka. ksqlDB построен на основе Kafka Streams API, и он также имеет первоклассную поддержку для «потоков» и «таблиц».
в чем разница между Consumer API и Streams API?
API потоков Kafka ( https://kafka.apache.org/documentation/streams/ ) построен на основе клиентов-производителей и потребителей Kafka. Он значительно мощнее и выразительнее, чем потребительский клиент Kafka. Вот некоторые особенности API Kafka Streams:
- Поддерживает семантику обработки только один раз (версии Kafka 0.11+)
- Поддерживает отказоустойчивую обработку с отслеживанием состояния (и, конечно, без сохранения состояния), включая потоковые соединения , агрегирование и управление окнами . Другими словами, он поддерживает управление состоянием обработки вашего приложения из коробки.
- Поддерживает обработку во время события, а также обработку на основе времени обработки и приема
- Имеет первоклассную поддержку как для потоков, так и для таблиц , где потоковая обработка встречается с базами данных; на практике большинству приложений потоковой обработки требуются как потоки, так и таблицы для реализации их соответствующих вариантов использования, поэтому, если в технологии потоковой обработки отсутствует какая-либо из двух абстракций (например, нет поддержки таблиц), вы либо застряли, либо должны вручную реализовать эту функцию самостоятельно (Удачи с этим...)
- Поддерживает интерактивные запросы (также называемые "запрашиваемым состоянием"), чтобы предоставлять последние результаты обработки другим приложениям и службам.
- Есть более выразительным: он поставляется с (1) функциональный стиль программирования DSL с операциями , такими как
map
, filter
, reduce
а также (2) императивный стиль процессора API для , например , делать сложную обработку событий (CEP), и (3) можно даже комбинировать DSL и API процессора.
См. Http://docs.confluent.io/current/streams/introduction.html для более подробного, но все же высокоуровневого введения в Kafka Streams API, которое также должно помочь вам понять различия с потребителем Kafka более низкого уровня. клиент. Также есть учебник на основе Docker для Kafka Streams API , о котором я писал в блоге ранее на этой неделе.
Так чем же отличается API-интерфейс Kafka Streams, поскольку он также потребляет сообщения из Kafka или отправляет им сообщения?
Да, Kafka Streams API может как читать данные, так и записывать данные в Kafka.
и зачем это нужно, если мы можем написать собственное потребительское приложение с использованием Consumer API и обработать их по мере необходимости или отправить их в Spark из потребительского приложения?
Да, вы могли бы написать свое собственное потребительское приложение - как я уже упоминал, API-интерфейс Kafka Streams использует сам клиент-клиент Kafka (плюс клиент-производитель), но вам придется вручную реализовать все уникальные функции, которые предоставляет Streams API. . См. Список выше, чтобы узнать обо всем, что вы получаете «бесплатно». Таким образом, это довольно редкое обстоятельство, когда пользователь выберет низкоуровневый клиент-клиент, а не более мощный API Kafka Streams.