1. Особенности Кафки
- Система обмена сообщениями: модель «выживший — потребитель» по принципу «первым пришел — первым ушел» (FIFO). Раздел FIFO внутри, но не FIFO между разделами.Конечно, мы можем установить тему как раздел, который является строгим FIFO.
- Постоянство: могут выполняться операции по сохранению. Сохраняйте сообщения на диск, чтобы их можно было использовать для пакетного потребления, например ETL, и приложений реального времени. Предотвратите потерю данных за счет сохранения данных на диск и репликации. Добавить непосредственно на диск. Преимущество этого заключается в прямом сохранении, и данные не будут потеряны. Второе преимущество — последовательная запись, а данные потребления также являются последовательным чтением, поэтому порядок может быть гарантирован при сохранении.
- Распределенный: легко масштабируется. Все производители, брокеры и потребители будут иметь несколько, все распределены. Машины могут быть расширены без простоев.
- Высокая пропускная способность: обеспечивает высокую пропускную способность как для публикации, так и для подписки. Понятно, что Kafka может производить около 250 000 сообщений в секунду (50 МБ) и обрабатывать 550 000 сообщений в секунду (110 МБ).
- технология нулевого копирования
- Распределенное хранилище
- последовательное чтение последовательная запись
- пакетное чтение пакетная запись
2. Сценарии использования Кафки
2.1 Система сообщений
Kafka используется в качестве замены традиционного промежуточного программного обеспечения для обмена сообщениями. По сравнению с большинством систем обмена сообщениями, Kafka имеетЛучшая пропускная способность, встроенное разделение, несколько реплик и отказоустойчивость, что делает его хорошим решением для крупномасштабных приложений обмена сообщениями. По нашему опыту, использование сообщений обычно имеет относительно низкую пропускную способность, но может потребовать низкой сквозной задержки и часто требует надежных гарантий надежности, которые предоставляет Kafka.
В этом отношении Kafka сравнима с традиционными системами обмена сообщениями, такими как ActiveMQ или RabbitMQ.
Распространенные сценарии использования очередей сообщений в практических приложениях: асинхронная обработка, разделение приложений, отключение трафика и обмен сообщениями.
2.2 Отслеживание поведения на сайте
Еще один сценарий применения Kafka — отслеживать просмотр, поиск и другие действия пользователей и записывать их в соответствующей теме в режиме реального времени в режиме публикации-подписки. После того, как эти результаты будут получены подписчиками, они могут быть дополнительно обработаны в режиме реального времени, или отслежены в режиме реального времени, или помещены в хранилище данных hadoop/офлайн для обработки.
2.3 Индикаторы
Используйте Kafka для сбора индикаторов, связанных с работоспособностью приложений и серверов, таких как загрузка ЦП, ввод-вывод, память, количество подключений, TPS, QPS и т. д., а затем обрабатывайте информацию индикаторов для создания системы визуального мониторинга с панелями мониторинга, графиками и т. д. и т.п. Например, многие компании используют Kafka для интеграции с ELK (ElasticSearch, Logstash и Kibana) для создания систем мониторинга сервисов приложений.
2.4 Агрегация журналов
На самом деле существует множество продуктов с открытым исходным кодом, включая Scribe, Apache Flume, и многие люди используют Kafka вместо агрегации журналов.
Агрегация журналов обычно собирает файлы журналов с серверов и обрабатывает их централизованно (файловый сервер или HDFS). Однако Kafka игнорирует детали файла и более четко абстрагирует его в поток сообщений журналов или событий. Это снижает задержку обработки Kafka и упрощает поддержку нескольких источников данных и распределенную обработку данных. По сравнению с системами, ориентированными на журналы, такими как Scribe или Flume, Kafka обеспечивает такую же эффективную производительность и механизм репликации, что обеспечивает более надежные гарантии надежности и меньшую сквозную задержку.
2.5 Потоковая обработка
Сохраните собранные потоковые данные, чтобы предоставить Storm или другим средам потоковых вычислений для последующей обработки. Многие пользователи будут обрабатывать, объединять, расширять или иным образом передавать данные из исходной темы в новую тему и продолжать последующую обработку.
Например, поток обработки рекомендации статьи может заключаться в том, чтобы сначала получить содержимое статьи из источника данных RSS, а затем добавить его в тему под названием «статья». Последующая операция может потребовать очистки содержимого, например как ответ на обычные данные или удалить повторяющиеся данные, и, наконец, вернуть пользователю результат сопоставления контента.
Начиная с версии 0.10.0.0, Apache Kafka предоставляет облегченную, но мощную библиотеку потоковой обработки под названием Kafka Streams, которая выполняет обработку данных, как описано выше. Помимо Kafka Streams, альтернативные инструменты обработки потоков с открытым исходным кодом включают Apache Storm и Apache Samza.
2.6 Источники событий
Источник событий — это способ разработки приложений, при котором переходы между состояниями записываются в виде хронологически упорядоченной последовательности записей. Kafka может хранить большие объемы данных журнала, что делает его отличным бэкендом для приложений. Например, динамическая сводка (новостная лента).
2.7 Журнал фиксации
Kafka может обслуживать внешнюю распределенную систему постоянного хранения журналов. Этот журнал может создавать резервные копии данных между узлами и обеспечивать механизм повторной синхронизации для восстановления данных с отказавших узлов. Функция сжатия журнала в Kafka обеспечивает условия для такого использования. В этом использовании Kafka похож на проект Apache BookKeeper.
3. Точки дизайна Kafka
1. Непосредственно используйте кэш файловой системы Linux для эффективного кэширования данных.
2. Используйте нулевое копирование Linux для повышения производительности отправки.
3. Стоимость доступа к данным на диске составляет O(1).
4. Явное распределение, т. е. будет несколько производителей, посредников и потребителей, и все они распределены. Механизм балансировки нагрузки между производителями и брокерами отсутствует. Zookeeper используется для балансировки нагрузки между брокерами и потребителями. Все брокеры и потребители будут зарегистрированы в zookeeper, и zookeeper сохранит часть их метаданных. Если брокер или потребитель меняются, все другие брокеры и потребители будут уведомлены.