Оновлення 09 квітня 2018 р . : Сьогодні ви також можете використовувати ksqlDB , базу даних потокової передачі подій для Kafka, для обробки ваших даних у Kafka. ksqlDB побудований поверх API потоків Kafka, і він також має першокласну підтримку "потоків" і "таблиць".
у чому різниця між API споживачів та 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 для більш детального, але все ще високого рівня вступу до API Kafka Streams, який також повинен допомогти вам зрозуміти відмінності від нижчого рівня споживача Kafka клієнт. Існує також підручник на основі Docker для API Kafka Streams , про який я писав блоги на початку цього тижня.
То чим же відрізняється API потоків Kafka, оскільки він також споживає або створює повідомлення Kafka?
Так, API Kafka Streams може як читати дані, так і записувати дані в Kafka.
і навіщо це потрібно, оскільки ми можемо писати власну споживчу програму за допомогою API споживача та обробляти їх за потреби або надсилати до Spark із споживчої програми?
Так, ви можете написати свій власний споживчий додаток - як я вже згадував, API Kafka Streams використовує клієнт Kafka споживача (плюс клієнт виробника), але вам доведеться вручну реалізувати всі унікальні функції, які надає API Streams . Перегляньте список вище для всього, що ви отримуєте "безкоштовно". Таким чином, досить рідкісна обставина, що користувач вибирає споживчого клієнта низького рівня, а не більш потужний API Kafka Streams.