За даними сайту Kafka :
" Kakfa використовується для побудови конвеєрів даних у режимі реального часу та потокових програм. "
Шукаючи в Інтернеті далеко і широко, я знайшов таке загальновизнане визначення, що таке " потокові дані ":
- Дані потоку - це дані, що безперервно надходять від джерела до місця призначення через мережу; і
- Дані потоку не мають атомної природи, тобто будь-яка частина потоку потоку даних є осмисленою та оброблюваною, на відміну від файлу, байти якого нічого не означають, якщо у вас їх немає; і
- Дані потоку можна запускати / зупиняти в будь-який час; і
- Споживачі можуть за бажанням приєднувати та відлучати від потоку даних та обробляти лише ті частини, які вони хочуть
Тепер, якщо щось, про що я говорив вище, є невірним, неповним або абсолютно неправильним, почніть, виправляючи мене! Якщо припустити, що я більш-менш на шляху, то ...
Тепер, коли я розумію, що таке "потокова передача даних", то я розумію, що означають Кафка та Кінесіс, коли вони рахують себе як обробка / посередництво проміжного програмного забезпечення для програм із потоковими даними. Але це викликало мої інтереси: чи можна / слід "передавати проміжне програмне забезпечення" на зразок Kafka або Kinesis для неперетікання даних, як традиційні брокери повідомлень? І навпаки: чи можна / повинні традиційні MQ, такі як RabbitMQ, ActiveMQ, Apollo тощо, використовуватися для потокової передачі даних?
Візьмемо приклад, коли додаток надсилатиме постійний запуск резервного повідомлення JSON-повідомлень, які потрібно обробити, а обробка є досить складною (перевірка, перетворення даних, фільтрація, агрегація тощо):
- Справа №1: повідомлення - це кожен кадр фільму; це одна помилка JSON на відеокадр, що містить дані кадру та деякі підтримуючі метадані
- Випадок №2: Повідомлення - це дані часових рядів, можливо, чиєсь серцебиття як функція часу. Отже, повідомлення №1 надсилається, що відображає моє серцебиття при t = 1, повідомлення №2 містить моє серцебиття при t = 2 і т.д.
- Випадок №3: Дані є абсолютно розрізненими та не пов'язаними з часом або як частина будь-якого "потоку даних". Можливо, події аудиту / безпеки, які звільняються, коли сотні користувачів орієнтуються на додаток, натискаючи кнопки та вживаючи заходів
Виходячи з того, як проводиться облік рахунків Kafka / Kinesis та на моєму розумінні, що таке "потокова передача даних", вони здаються очевидними кандидатами у випадках №1 (суміжні відеодані) та №2 (суміжні дані часових рядів). Однак я не бачу жодної причини, чому традиційний брокер повідомлень, як RabbitMQ, не міг ефективно обробляти обидва ці входи.
А у випадку №3 нам надається лише подія, яка сталася, і нам потрібно обробити реакцію на цю подію. Тож для мене це говорить про необхідність використання традиційного брокера, такого як RabbitMQ. Але також немає жодних причин, через які ви не змогли б також Кафка або Кінесіс обробляти обробку даних про події.
Отже, я прагну створити рубрику, яка говорить: У мене є дані X з характеристиками Y. Я повинен використовувати потоковий процесор, як Kafka / Kinesis, щоб обробити його. Або, навпаки, той, який допомагає мені визначити: у мене є дані W із Z-характеристиками. Я повинен використовувати традиційного брокера повідомлень, щоб обробити його.
Тому я запитую: Які фактори щодо даних (або іншим чином) допомагають керувати рішенням між процесором потоку або брокером повідомлень, оскільки обидва можуть обробляти потокові дані, і обидва можуть обробляти (не потокові) дані повідомлень?