Статьи

Введение в Apache Kafka

Что такое Apache Kafka?

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

API производителя:

Этот API позволяет клиентам подключаться к серверам Kafka, работающим в кластере, и публиковать поток записей в одной или нескольких темах Kafka.

Потребительский API:

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

API потоков:

Этот API позволяет клиентам действовать как потоковые процессоры, потребляя потоки из одной или нескольких тем и создавая потоки для других выходных тем. Это позволяет преобразовывать входной и выходной потоки.

API коннектора:

Этот API позволяет писать повторно используемый код производителя и потребителя. Например, если мы хотим прочитать данные из любой СУБД, опубликовать данные в теме и использовать данные из темы и записать их в СУБД. С помощью API коннектора мы можем создавать повторно используемые компоненты коннектора источника и приемника для различных источников данных.

Для каких случаев используется Кафка?

Кафка используется для следующих случаев использования,

Система обмена сообщениями:

Kafka используется в качестве системы обмена корпоративными сообщениями для разделения исходной и целевой систем для обмена данными. Kafka обеспечивает высокую пропускную способность с разделами и отказоустойчивость при репликации по сравнению с JMS.

Отслеживание веб-активности:

Отслеживать события путешествия пользователя на сайте для аналитики и обработки данных в автономном режиме.

Агрегация журналов:

Обрабатывать журнал из разных систем. Особенно в распределенных средах с микросервисными архитектурами, где системы развертываются на разных хостах. Нам нужно объединить журналы из разных систем и сделать журналы доступными в центральном месте для анализа. Прочтите статью об архитектуре распределенного ведения журнала, где используется Kafka, https://smarttechie.org/2017/07/31/distributed-logging-architecture-for-micro-services/

Метрика Коллектор:

Кафка используется для сбора метрик из различных систем и сетей для мониторинга операций. Для таких инструментов мониторинга, как Ganglia , Graphite и т. Д., Доступны репортеры метрик Kafka.

Некоторые ссылки на эту https://github.com/stealthly/metrics-kafka

Что такое брокер?

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

Что такое тема?

Тема — это логическое имя, для которого публикуются записи. Внутри тема разделена на разделы, в которые публикуются данные. Эти разделы распределены между брокерами в кластере. Например, если в теме есть три раздела с 3 посредниками в кластере, у каждого посредника есть один раздел. Опубликованные данные в раздел добавляются только с шагом смещения.

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

  • Темы идентифицируются по названию. У нас может быть много тем в кластере.
  • Порядок сообщений поддерживается на уровне раздела, а не по теме.
  • Как только данные, записанные в раздел, не переопределяются. Это называется неизменностью.
  • Сообщение в разделах хранится с ключом, значением и отметкой времени. Кафка обеспечивает публикацию сообщения в том же разделе для данного ключа.
  • Из кластера Kafka каждый раздел будет иметь лидера, который будет выполнять операции чтения / записи в этот раздел.

В приведенном выше примере я создал тему с тремя разделами с коэффициентом репликации 3. В этом случае, поскольку кластер имеет 3 посредника, три раздела распределены равномерно, а реплики каждого раздела реплицируются на еще 2 посредника. Поскольку коэффициент репликации равен 3, потери данных не происходит, даже если 2 брокера не работают. Всегда держите коэффициент репликации больше 1 и меньше или равен числу посредников в кластере. Нельзя создать тему с коэффициентом репликации, превышающим количество посредников в кластере.

На приведенной выше диаграмме для каждого раздела есть лидер (светящийся раздел), а другие несинхронные реплики (серые разделы) являются подписчиками. Для раздела 0 брокер-1 является лидером, а брокер-2 — брокером-3 — фолловерами. Все операции чтения / записи в раздел 0 будут переданы в broker-1, а то же самое будет скопировано в broker-2 и broker-3.

Теперь давайте создадим кластер Kafka с 3 брокерами, выполнив следующие шаги.

Шаг 1:

Загрузите последнюю версию Apache Kafka . В этом примере я использую 1.0, который является последним. Извлеките папку и перейдите в папку bin. Запустите Zookeeper, который необходим для запуска с кластера Kafka. Zookeeper — это координационная служба для управления брокерами, выбора лидера для разделов и оповещения Kafka об изменениях в теме (удаление темы, создание темы и т. Д.) Или брокеров (добавление брокера, умирание брокера и т. Д.). В этом примере я запустил только один экземпляр Zookeeper. В производственных средах у нас должно быть больше экземпляров Zookeeper для управления аварийным переключением. Без Zookeeper Kafka кластер не может работать.

1
./zookeeper-server-start.sh ../config/zookeeper.properties

Шаг 2:

Теперь начните Kafka брокеров. В этом примере мы собираемся запустить трех брокеров. Перейдите в папку config в корневом каталоге Kafka и скопируйте файл server.properties 3 раза и назовите его как server_1.properties, server_2.properties и server_3.properties. Измените следующие свойства в этих файлах.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
#####server_1.properties#####
broker.id=1
listeners=PLAINTEXT://:9091
log.dirs=/tmp/kafka-logs-1
 
#####server_2.properties######
broker.id=2
listeners=PLAINTEXT://:9092
log.dirs=/tmp/kafka-logs-2
 
######server_3.properties#####
broker.id=3
listeners=PLAINTEXT://:9093
log.dirs=/tmp/kafka-logs-3M

Теперь запустите 3 брокера с помощью следующих команд.

1
2
3
4
5
6
7
8
###Start Broker 1 #######
./kafka-server-start.sh ../config/server_1.properties
 
###Start Broker 2 #######
./kafka-server-start.sh ../config/server_2.properties
 
###Start Broker 3 #######
./kafka-server-start.sh ../config/server_3.properties

Шаг 3:

Создайте тему с помощью команды ниже.

1
./kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 3 --topic first_topic

Шаг 4:

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

1
2
3
4
5
6
./kafka-console-producer.sh --broker-list localhost:9091 --topic first_topic
>First message
>Second message
>Third message
>Fourth message
>

Шаг 5:

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

1
./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic first_topic --from-beginning

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

1
2
3
4
5
6
7
./kafka-topics.sh --describe --zookeeper localhost:2181 --topic first_topic
 
#### The Result for the above command#####
Topic:first_topic   PartitionCount:3    ReplicationFactor:3 Configs:
    Topic: first_topic  Partition: 0    Leader: 1   Replicas: 1,2,3 Isr: 1,2,3
    Topic: first_topic  Partition: 1    Leader: 2   Replicas: 2,3,1 Isr: 2,3,1
    Topic: first_topic  Partition: 2    Leader: 3   Replicas: 3,1,2 Isr: 3,1,2

В приведенном выше описании broker-1 является лидером для раздела: 0, а broker-1, broker-2 и broker-3 имеют реплики каждого раздела.

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

Опубликовано на Java Code Geeks с разрешения Шивы Джанапати, партнера нашей программы JCG. Смотреть оригинальную статью здесь: Введение в Apache Kafka

Мнения, высказанные участниками Java Code Geeks, являются их собственными.