Apache Kafka

что это и как она изменит архитектуру вашего приложения

Иван Пономарёв, КУРС/МФТИ

me
  • Tech Lead at KURS

  • ERP systems & Java background

  • Speaker at JPoint, Devoops, Heisenbug, JUG.MSK, etc.

  • Twitter @inponomarev

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Что такое лог?

oak log
  • Добавляем данные в конец

  • Записанное не можем изменить

  • Читаем последовательно

 — Что наша жизнь?

 — Что наша жизнь?

oak log

 — Лог!

Автоматизировать склад. Как?

товарячейкакол-во

X

A

8

X

B

2

Y

B

1

Всё хорошо, пока…​

emptyshelf

Что это может быть?

  • Украли (разбили, выкинули и т. п.)

  • Потеряли: лежит где-то рядом

Что это может быть?

  • Украли (разбили, выкинули и т. п.)

  • Потеряли: лежит где-то рядом

  • ЭТО ВАША ТУПАЯ ПРОГРАММА НЕ РАБОТАЕТ

upset cropped

Что будем делать?

messy

Как на самом деле надо проектировать?

noway
  • «База данных — это склад»

Как на самом деле надо проектировать?

noway
  • «База данных — это склад»

okay
  • База данных отражает процессы.

  • Текущее состояние — результат выполнения процессов

Warehouse Ledger

дататоварячейкакол-воописание

02.04.2020

X

A

10

начальный остаток

02.04.2020

X

B

2

начальный остаток

02.04.2020

Y

B

1

начальный остаток

Warehouse Ledger

дататоварячейкакол-воописание

02.04.2020

X

A

10

начальный остаток

02.04.2020

X

B

2

начальный остаток

02.04.2020

Y

B

1

начальный остаток

09.04.2020

X

A

-2

Василий по заданию №1

Warehouse Ledger

дататоварячейкакол-воописание

02.04.2020

X

A

10

начальный остаток

02.04.2020

X

B

2

начальный остаток

02.04.2020

Y

B

1

начальный остаток

09.04.2020

X

A

-2

Василий по заданию №1

09.04.2020

X

B

2

Василий по заданию №1

А если мы ошиблись с учётом?

дататоварячейкакол-воописание

9.04.2020

X

A

-2

Василий по заданию №1

9.04.2020

X

B

2

Василий по заданию №1

9.04.2020

X

A

2

Сторно задания №1

9.04.2020

X

B

-2

Сторно задания №1

На какие вопросы уже можно ответить?

  • Сколько у нас всего на складе товара Y?

  • Что лежит в ячейке B?

  • Сколько товаров переместил Василий 9 апреля?

  • Какие корректировки вносились в систему?

Расследуем инцидент

  • 9 апреля Василий должен был положить товар из A в В.

  • Давайте посмотрим, что лежит в A?

  • Давайте спросим Василия?

На какие вопросы можно будет легко ответить?

  • Нагрузка на полку лимитирована 100 кг

  •  — Добавляем поле "вес" в Ledger!

  • Нужно посчитать зарплату работников склада

  •  — Даже добавлять ничего не надо.

Архитектура решения: лог не работает в одиночку

erp architecture

Предварительный итог

Наличие лога позволяет

  • Добавлять новую функциональность

  • Искать корелляции событий, выявлять и расследовать мошенническое поведение

  • Исправлять алгоритмические ошибки и пересчитывать данные

  • Наша жизнь — это append-only log

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

    1. Общая информация

    2. Как устроен кластер

    3. Как устроена запись

    4. Как устроено чтение

    5. Retention и компактификация

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Kafka это

kafka logo

В Кафке можно

okay
  • Записать нечто в именованный лог (topic)

  • Прочитать записи из топика в FIFO порядке (в пределах партиции)

  • Зафиксировать место, до которого дочитал

В Кафке нельзя

noway
  • Стереть запись

  • Изменить запись

  • Найти в логе запись иначе, как по её порядковому номеру

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

    1. Общая информация

    2. Как устроен кластер

    3. Как устроена запись

    4. Как устроено чтение

    5. Retention и компактификация

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Кластер Kafka: брокеры и Zookeeper

cluster anatomy

Топики, партиции и сообщения

topics partitions

Топики, партиции и сообщения

topics partitions1

Топики, партиции и сообщения

topics partitions2

Репликация партиций

broker topics0

Репликация партиций

broker topics1

Репликация партиций

broker topics2

Репликация партиций

broker topics3

Репликация партиций

broker topics4

Репликация партиций

broker topics5

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

    1. Общая информация

    2. Как устроен кластер

    3. Как устроена запись

    4. Как устроено чтение

    5. Retention и компактификация

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Анатомия сообщения

message anatomy

Анатомия сообщения

message anatomy2
// hash the keyBytes to choose a partition
return Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;

Пропускная способность vs время ожидания

batch.size and linger.ms

low throughput
high throughput

Запись в Кафку

acks = 0

 

prod1

Запись в Кафку

acks = 1

 

prod2

Запись в Кафку

acks = -1

min.insync.replicas

prod3

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

    1. Общая информация

    2. Как устроен кластер

    3. Как устроена запись

    4. Как устроено чтение

    5. Retention и компактификация

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Чтение из Кафки

ConsumerG0

Чтение из Кафки

ConsumerG

Чтение из Кафки

ConsumerG2

Чтение из Кафки

ConsumerG3

Offset Commit

offcommit1

Offset Commit

offcommit2

Offset Commit

offcommit3

Offset Commit

offcommit4

Offset Commit

offcommit5

Offset Commit

offcommit6

Offset Commit

offcommit7

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

    1. Общая информация

    2. Как устроен кластер

    3. Как устроена запись

    4. Как устроено чтение

    5. Retention и компактификация

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Как работает retention

retention0

Как работает retention

retention1

Как работает retention

retention2

Как работает retention

retention3

Как работает retention

retention4

Как работает retention

retention5
tapeloop

Компактификация топиков

log compaction
Источник: Kafka Documentation

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Потоковая обработка данных: архитектура

streaming arch1

Stateless Transformation

yelling topology1.png
KStream<String, String> stream =  streamsBuilder.stream(
     SRC_TOPIC, Consumed.with(Serdes.String(), Serdes.String());

Stateless Transformation

yelling topology2.png
KStream<String, String> upperCasedStream =
    stream.mapValues(String::toUpperCase);

Stateless Transformation

yelling topology3.png
upperCasedStream.to(SINK_TOPIC,
     Produced.with(Serdes.String(), Serdes.String());

Три строчки кода, ну и что тут такого?

  • Больше сообщений в секунду? — больше машин с одинаковым application.id!

w1

Добавляем ноды

w2

Ограничены только числом партиций

w4

Магия Stateful Transformation

counting topology changelog1.png

Изменения реплицируются в топик!

counting topology changelog2.png

Партиционирование и local state

local partitioning oneworker.png

Партиционирование и local state

local partitioning 1.png

Партиционирование и local state

local partitioning 2.png

Партиционирование и local state

local partitioning 25.png

Партиционирование и local state

local partitioning 3.png

Партиционирование и local state

local partitioning 4.png

Партиционирование и local state

local partitioning 5.png

Партиционирование и local state

local partitioning 6.png

Что ещё умеют стримы?

Соединять источники!

join storages.png

Агрегировать данные во временных окнах

tumbling window
Источник: Kafka Streams in Action

«Склеивать» данные, относящиеся к рабочей сессии

streams session windows 02

KSQL

CREATE STREAM pageviews_enriched AS
  SELECT pv.viewtime,
         pv.userid AS userid,
         pv.pageid,
         pv.timestring,
         u.gender,
         u.regionid,
         u.interests,
         u.contactinfo
  FROM pageviews_transformed pv
  LEFT JOIN users_5part u ON pv.userid = u.userid
  EMIT CHANGES;

KSQL

CREATE TABLE pageviews_per_region_per_30secs AS
  SELECT regionid,
         count(*)
  FROM pageviews_enriched
  WINDOW TUMBLING (SIZE 30 SECONDS)
  WHERE UCASE(gender)='FEMALE' AND LCASE(regionid)='region_6'
  GROUP BY regionid
  EMIT CHANGES;

Кейсы для потоковых систем

  • Мониторинг! Логи!

  • Отслеживание действий пользователей

  • Выявление аномалий (в т. ч. попыток мошенничества)

streams ok
tapeloop
streams noway

О чём следует помнить

  • При изменении схемы данных миграция не похожа на RDBMS.

  • Once-only delivery:

    • В обычном режиме, сбой в KStreams приводит к повторному чтению данных.

    • В режиме once-only delivery — чтение и запись между топиками Kafka.

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Kafka и Javascript

streaming arch2

Kafka и Javascript

streaming arch3

kafka-node

kafka node
  • Лидер по звёздам и количеству использований

  • Чистая JavaScript-реализация

  • Умеет не всё.

node-rdkafka

node rdkafka
  • Github-метрики проигрывают kafka-node

  • JavaScript/C++

  • Обёртка вокруг librdkafka — очень зрелого проекта

  • Умеет работать с Confluent Cloud

Преобразующий/выходной каскад на node.js?

streaming arch4

Преобразующий/выходной каскад на node.js?

nodefluent
  • node-sinek — ещё один клиент

  • kafka-streams — реимплементация KStreams для node.js

  • kafka-connect — реимплементация kafka-connect

KSQL + Serverless

streaming arch5

Наш план

kafka
  1. Что такое лог и почему это важно

  2. Что такое Kafka и что она умеет

  3. Что такое потоковая архитектура и на что способны потоковые обработчики

  4. Kafka и JavaScript

  5. Как попробовать Кафку сегодня

kafka

Вы решили попробовать Кафку. С чего начать?

kafkacat — лучший CLI инструмент

conduktor

Conduktor — лучший GUI инструмент

conduktor screen

Эксплуатировать Кафку в production тяжело

koshelev

Kafka: The Definitive Guide

kafka the definitive guide
  • Gwen Shapira, Neha Narkhede, Todd Palino

  • September 2017

Сообщества, конференции

kafka summit

Телеграм

Грефневая Кафка

Митап в Москве

Moscow Apache Kafka® Meetup by Confluent — раз в квартал

На этом всё!

kafka logo
conduktor

Спасибо!