Рубрики
Без рубрики

Кафка – Ускоренный курс

Apache Kafka по своей сути является распределенной, масштабируемой и отказоустойчивой системой ведения журналов, представленной в качестве темы… С тегами кафка, весенняя кафка, весенняя загрузка, java.

Apache Kafka по своей сути является распределенной, масштабируемой и отказоустойчивой системой ведения журналов, представленной в виде абстракции темы и реализованной с использованием высокопроизводительного и не зависящего от языка протокола TCP , что позволяет использовать ее различными способами:

  • Система Потоковой Обработки
  • Система Сообщений
  • Система Хранения Данных

Документация Apache Kafka действительно лаконична и по существу, я действительно рекомендую вам прочитать ее в качестве начальной ссылки на работу с Кафкой.

Он предлагает основные API-интерфейсы для Производство и Потребление сообщений, Потоковая передача сообщений и подключение к внешним системам с помощью API соединителя .

У него есть свой основной клиент на Java но есть также клиенты, созданные для многих других языков таких как Node.js, .NET, Scala и другие.

У Кафки есть абстракции по распределенному ведению журнала, тема, также предоставляет клиентские API для взаимодействия с ней. Давайте узнаем немного больше о том, как темы работают за кулисами, чтобы обеспечить высокую доступность и масштабируемость, а также о клиентских API, которые позволяют нам создавать, потреблять и манипулировать существующими данными, но сначала мы рассмотрим обзор высокого уровня Kafka с его брокерами и клиентами.

Брокеры

Брокеры Kafka являются ядром, в котором управляются темы, и они также предоставляют некоторую базовую поддержку для координации клиентов Kafka, что будет более подробно описано в другом посте.

Добавление дополнительных серверов в кластер Kafka несколько тривиально, все, что нужно, это запустить новый экземпляр, присвоить ему уникальный идентификатор брокера и, как только они будут запущены, назначить некоторые разделы новому брокеру. Оттуда Кафка позаботится о том, чтобы скопировать данные соответствующему брокеру и интегрировать брокера в кластер, автоматически управляя существующими разделами и репликами.

Темы

Кафка предоставляет абстракцию темы в своей распределенной системе журналов, которая может быть разделена от 1 до N раз, а ее разделы также могут реплицироваться от 1 до N раз для обеспечения высокой доступности и долговечности.

В теме может быть от нуля до многих потребителей, которые подписываются на получение содержащихся в ней данных, и каждая тема может быть разделена несколько раз, когда тема разделена, сообщения будут сохранены и перенаправлены в каждый раздел на основе того, предоставляете вы или нет ключ при отправке сообщения в тему.

Продюсеры Кафки

Производители позволяют нам публиковать сообщения по темам. Производитель также несет ответственность за перенаправление нашего сообщения в соответствующий раздел, если мы предоставляем ключ, или делает это циклически по умолчанию, если мы не предоставляем ключ вместе с сообщением.

Реализация Java производителя Kafka является потокобезопасной, поэтому ее можно повторно использовать для отправки сообщений в разные разделы и даже темы, и в соответствии с некоторыми критериями повторное использование темы действительно рекомендуется и во многих случаях обеспечивает лучшую производительность.

Сообщения всегда добавляются в журнал в том же порядке, в каком они отправляются производителем, и каждое сообщение автоматически получает номер “смещения”. Потребитель читает сообщения в том же порядке, в каком они хранятся в журнале.

Когда вы используете производителя Кафки для отправки сообщения в определенную тему и не предоставляете ключ, производитель будет использовать циклический перебор и равномерно распределять сообщения между всеми разделами.

Если вы предоставляете ключ для каждого сообщения, производитель будет хэшировать ключ для выбора разделов, значение хэша результата должно находиться в интервале 0-NP (от нуля до количества разделов), что даст вам гарантию заказа по указанному ключу, поскольку все они будут находиться в одном и том же упорядоченном разделе.

Потребители Кафки

Потребитель читает сообщения от 1 до N тем и их разделов.

Потребитель имеет большой контроль над тем, как будут обрабатываться эти сообщения, и может распараллеливать и распределять нагрузку на основе своих конфигураций, это можно сделать с помощью конфигурации группы потребителей если вы передадите одну и ту же группу потребителей нескольким экземплярам, использующим одну и ту же тему, они разделят нагрузку, разделив доступные разделы по этой конкретной теме между существующими членами группы, которые затем будут работать как механизм “точка-точка”, где каждый экземпляр будет считываться из определенного раздела.

С другой стороны, если вы предоставите каждому экземпляру клиента его собственную группу i d каждый экземпляр будет обрабатывать сообщения из всех существующих разделов для этой конкретной темы.

Несколько потребителей могут считывать данные из определенной темы, и каждый потребитель будет контролировать свое собственное смещение.

Потоки Кафки

Это библиотека, которая абстрагирует клиента-потребителя/производителя, где данные считываются и публикуются обратно в тему Кафки. В этом процессе вы можете выполнять преобразование данных, объединения и многие другие интересные операции. Наиболее заметное и интересное различие между потоками Kafka и другими потоковыми платформами, такими как Apache Flink , Apache Spark и другие потоковые платформы заключается в том, что потоки Kafka являются библиотекой, которая запускается напрямую, совместно с вашим приложением, в той же JVM, что дает вам большую гибкость и контроль как разработчику и предоставляет некоторые приятные возможности.

Есть очень хорошая статья сравнение потоков Кафки и Флинка, опубликованная в блоге Confluent если вы хотите узнать больше подробностей о различиях, я рекомендую вам прочитать ее.

API потоков Кафки разделен на два, высокоуровневый Streams DSL , который предоставляет вам операции без сохранения состояния и с отслеживанием состояния над потоком, созданным из темы, и в большинстве случаев достаточно, API потоков также предоставляет низкоуровневый API процессора , который дает вам больше контроля с компромиссом дополнительной сложности. Рекомендуется использовать его только в очень специфических случаях, когда вам нужно больше контролировать свои потоки и вы не можете сделать это с помощью DSL потоков.

Мы увидим потоки Кафки более подробно в будущих сообщениях.

Соединители Кафки

Соединители Kafka позволяют вам “синхронизировать” данные между Kafka и внешними ресурсами надежным и эффективным способом, позволяя перемещать большие объемы данных между вашими системами, используя при этом преимущества устойчивости и масштабируемости Kafka и используя его автоматизированное управление смещениями и общую структуру для интеграции различных источников данных в вашей организации.

Наличие стандартной, автоматизированной и надежной интеграции является чем-то очень важным для большой организации и позволяет командам выполнять обработку в реальном времени и реагировать на изменение данных из множества различных систем.

Более подробно мы рассмотрим коннекторы Кафки в будущих сообщениях.

Мы только что закончили очень быстрый ускоренный курс по Кафке. Я надеюсь, что эта статья полезна для того, чтобы дать вам очень быстрый обзор Кафки на высоком уровне, понять основы того, как он работает, и его API.

Для более подробного объяснения некоторых концепций, рассмотренных здесь, я настоятельно рекомендую вам взглянуть на эту статью моего друга Тима: Глава Первая Кафка где эти концепции освещаются очень дружелюбно.

Официальная документация Apache Kafka

Документация платформы Confluent

Весенний Кафка

Журнал: Что должен знать каждый инженер-программист об объединяющей абстракции данных в реальном времени.

Оригинал: “https://dev.to/thegroo/kafka-crash-course-7j7”