Apache Kafka

Содержание

Слайд 2

План Зачем нам Apache Kafka Введение в Кафку Архитектура Неочевидности Выводы

План

Зачем нам Apache Kafka
Введение в Кафку
Архитектура
Неочевидности
Выводы

Слайд 3

Зачем нам Apache Kafka

Зачем нам Apache Kafka

Слайд 4

Зачем нам Apache Kafka - Vostok Hercules https://github.com/vostok

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

Слайд 5

Зачем нам Apache Kafka - Vostok Hercules https://github.com/vostok - Логи

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

- Логи

Слайд 6

Зачем нам Apache Kafka - Vostok Hercules https://github.com/vostok Логи Метрики

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

Логи
Метрики

Слайд 7

Зачем нам Apache Kafka - Vostok Hercules https://github.com/vostok Логи Метрики Трассировки

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

Логи
Метрики
Трассировки

Слайд 8

Зачем нам Apache Kafka - Vostok Hercules https://github.com/vostok Логи Метрики Трассировки Бизнес-события

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

Логи
Метрики
Трассировки
Бизнес-события

Слайд 9

Зачем нам Apache Kafka Vostok Hercules Search & Recommendation Systems (SRS)

Зачем нам Apache Kafka

Vostok Hercules
Search & Recommendation Systems (SRS)

Слайд 10

Зачем нам Apache Kafka Vostok Hercules [Kafka 2.0+] Search & Recommendation Systems (SRS)

Зачем нам Apache Kafka

Vostok Hercules [Kafka 2.0+]
Search & Recommendation Systems (SRS)

Слайд 11

Зачем нам Apache Kafka Vostok Hercules [Kafka 2.0+] Search & Recommendation Systems (SRS) [Kafka 0.11.x]

Зачем нам Apache Kafka

Vostok Hercules [Kafka 2.0+]
Search & Recommendation Systems (SRS) [Kafka

0.11.x]
Слайд 12

Блиц-опрос

Блиц-опрос

Слайд 13

Блиц-опрос Кто использует Apache Kafka?

Блиц-опрос

Кто использует Apache Kafka?

Слайд 14

Блиц-опрос Кто использует Apache Kafka? Версия…

Блиц-опрос

Кто использует Apache Kafka?
Версия…
< 0.11?

Слайд 15

Блиц-опрос Кто использует Apache Kafka? Версия…

Блиц-опрос

Кто использует Apache Kafka?
Версия…
< 0.11? 0.11.x?

Слайд 16

Блиц-опрос Кто использует Apache Kafka? Версия… 1.x.x?

Блиц-опрос

Кто использует Apache Kafka?
Версия…
< 0.11? 0.11.x?
1.x.x?

Слайд 17

Блиц-опрос Кто использует Apache Kafka? Версия… 1.x.x? 2.x.x?

Блиц-опрос

Кто использует Apache Kafka?
Версия…
< 0.11? 0.11.x?
1.x.x?
2.x.x?

Слайд 18

Введение в Apache Kafka

Введение в Apache Kafka

Слайд 19

Введение в Apache Kafka Kafka Producer Producer

Введение в Apache Kafka

Kafka Producer

Producer

Слайд 20

Введение в Apache Kafka Kafka Consumer Producer Consumer

Введение в Apache Kafka

Kafka Consumer

Producer

Consumer

Слайд 21

Введение в Apache Kafka Kafka Cluster Cluster Producer Consumer

Введение в Apache Kafka

Kafka Cluster
Cluster
Producer Consumer

Слайд 22

Введение в Apache Kafka Kafka Broker Cluster Producer Broker Consumer

Введение в Apache Kafka

Kafka Broker
Cluster
Producer Broker Consumer

Слайд 23

Введение в Apache Kafka Producer Consumer Broker Cluster

Введение в Apache Kafka

Producer

Consumer

Broker

Cluster

Слайд 24

Введение в Apache Kafka Kafka Topic Cluster Producer Broker Consumer Topic

Введение в Apache Kafka

Kafka Topic
Cluster
Producer Broker Consumer Topic

Слайд 25

Введение в Apache Kafka Pub-Sub с poll-механикой чтения Cluster Producer Broker Consumer Topic

Введение в Apache Kafka

Pub-Sub с poll-механикой чтения
Cluster
Producer Broker Consumer Topic

Слайд 26

Архитектура Apache Kafka Topic Broker Producer Consumer

Архитектура Apache Kafka

Topic
Broker
Producer
Consumer

Слайд 27

Архитектура Kafka Topic topic = {partition} partition 0 partition 1 partition 2

Архитектура Kafka Topic

topic = {partition}

partition 0
partition 1
partition 2

Слайд 28

Архитектура Kafka Topic topic = {partition} partition 0 partition 1 partition 2

Архитектура Kafka Topic

topic = {partition}

partition 0
partition 1
partition 2

Слайд 29

Архитектура Kafka Topic topic = {partition} partition 0 partition 1 partition 2

Архитектура Kafka Topic

topic = {partition}

partition 0
partition 1
partition 2

Слайд 30

Архитектура Kafka Topic topic = {partition} partition 0 partition 1 partition 2

Архитектура Kafka Topic

topic = {partition}

partition 0
partition 1
partition 2

Слайд 31

Архитектура Kafka Topic topic = {partition} partition 0 partition 1 partition 2 offset = 0

Архитектура Kafka Topic

topic = {partition}

partition 0

partition 1
partition 2

offset = 0

Слайд 32

Архитектура Kafka Topic topic = {partition} partition 0 partition 1 partition 2 offset = 1

Архитектура Kafka Topic

topic = {partition}

partition 0

partition 1
partition 2

offset = 1

Слайд 33

Архитектура Kafka Topic topic = {partition} partition 0 partition 1 partition 2 offset = 2

Архитектура Kafka Topic

topic = {partition}

partition 0

partition 1
partition 2

offset = 2

Слайд 34

Архитектура Kafka Topic topic = {partition} partition 0 partition 1 partition 2 offset = 3

Архитектура Kafka Topic

topic = {partition}

partition 0

partition 1
partition 2

offset = 3

Слайд 35

Архитектура Kafka Topic partition = {segment}

Архитектура Kafka Topic

partition = {segment}

Слайд 36

Архитектура Kafka Topic partition = {segment}

Архитектура Kafka Topic

partition = {segment}

Слайд 37

Архитектура Kafka Topic partition = {segment} segment

Архитектура Kafka Topic

partition = {segment}

segment

Слайд 38

Архитектура Kafka Topic partition = {segment} segment

Архитектура Kafka Topic

partition = {segment}

segment

Слайд 39

Архитектура Kafka Topic partition = {segment} segment

Архитектура Kafka Topic

partition = {segment}

segment

Слайд 40

Архитектура Kafka Topic partition = {segment} base offset

Архитектура Kafka Topic

partition = {segment}

base offset

Слайд 41

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index 00000000001234567890.timeindex

Слайд 42

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index 00000000001234567890.timeindex

Слайд 43

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index 00000000001234567890.timeindex

Слайд 44

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex log

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index 00000000001234567890.timeindex

log

Слайд 45

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex log

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex

log

Index record = (relative

offset, posit
Слайд 46

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex log

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex

log

offset = 1234567890relative offset

= 0
size = 100 position = 0

Index record = (relative offset, posit

Слайд 47

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex log

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex

log

offset = 1234567891relative offset

= 1
size = 100 position = 100

Index record = (relative offset, posit

Слайд 48

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex log

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex

log

offset = 1234567892relative offset

= 2
size = 50 position = 200

Index record = (relative offset, posit

Слайд 49

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex log

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex

log

offset = 1234567893relative offset

= 3
size = 150 position = 250

Index record = (relative offset, posit

Слайд 50

Архитектура Kafka Topic segment = (base_offset, data, index, timeindex) 00000000001234567890.log 00000000001234567890.index 00000000001234567890.timeindex

Архитектура Kafka Topic

segment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex

Слайд 51

Архитектура Kafka Broker cluster = {broker} broker 1 broker 2 broker 3

Архитектура Kafka Broker

cluster = {broker}
broker 1 broker 2 broker 3

Слайд 52

Архитектура Kafka Broker Controller – координирует работу кластера broker 1 broker 2 broker 3

Архитектура Kafka Broker

Controller – координирует работу кластера
broker 1 broker 2 broker 3

Слайд 53

Архитектура Kafka Broker partition 0 partition 1 topic = {partition} broker 1 broker

Архитектура Kafka Broker

partition 0

partition 1

topic = {partition}
broker 1 broker 2 broker 3

partition 2

partition

3
Слайд 54

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 0

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 0

partition 1

partition 2

partition 3

partition

0

partition 1

partition 2

partition 3

replication factor = 3
broker 1 broker 2 broker 3

Слайд 55

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

partition 0

partition 1

partition 2

partition 3

partition 4

Добавление partition
broker 1 broker 2 broker 3

Слайд 56

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

partition 0

partition 1

partition 2

partition 3

partition 4

broker 1 – leader для partition 0.
broker 1 broker 2 broker 3

leader

Слайд 57

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

partition 0

partition 1

partition 2

partition 3

partition 4

broker 2 – leader для partition 1
broker 1 broker 2 broker 3

leader

Слайд 58

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

partition 0

partition 1

partition 2

partition 3

partition 4

broker 3 – leader для partition 2
broker 1 broker 2 broker 3

leader

Слайд 59

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

partition 0

partition 1

partition 2

partition 3

partition 4

broker 3 – leader для partition 3
broker 1 broker 2 broker 3

leader

Слайд 60

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

partition 0

partition 1

partition 2

partition 3

partition 4

broker 2 – leader для partition 4
broker 1 broker 2 broker 3

leader

Слайд 61

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

partition 0

partition 1

partition 2

partition 3

partition 4

Репликация с лидера на другие брокеры
broker 1 broker 2 broker 3

leader

Слайд 62

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

broker 2 broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

ISR (in sync replica) – реплика, синхронизированная с

лидероbrмoker 1

leader
ISR

Слайд 63

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

Все реплики синхронизированы
broker 1 broker 2 broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

leader
ISR

Слайд 64

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

Недоступность лидера у partition 2
broker 1 broker 2 broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

leader
ISR
failed

Слайд 65

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

Выбор нового лидера в случае недоступности
broker 1 broker 2 broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

leader
ISR
failed

Слайд 66

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

Репликация с нового лидера
broker 1 broker 2 broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

leader
ISR
failed

Слайд 67

Архитектура Kafka Broker broker 1 partition 0 partition 1 partition 2 partition 3

Архитектура Kafka Broker

broker 1

partition 0

partition 1

partition 2

partition 3

partition 4

broker 2

partition 0

partition

1

partition 2

partition 3

partition 4

broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

leader
ISR
failed

Слайд 68

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

broker 2 broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

Синхронизация реплики с лидером после

восстаbнroоkвerл1ения

leader
ISR
failed

Слайд 69

Архитектура Kafka Broker broker 1 partition 0 partition 1 partition 2 partition 3

Архитектура Kafka Broker

broker 1

partition 0

partition 1

partition 2

partition 3

partition 4

broker 2

partition 0

partition

1

partition 2

partition 3

partition 4

broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

leader
ISR
failed

Слайд 70

Архитектура Kafka Broker partition 0 partition 1 partition 2 partition 3 partition 4

Архитектура Kafka Broker

partition 0

partition 1

partition 2

partition 3

partition 4

partition 0

partition 1

partition 2

partition

3

partition 4

Перебалансировка лидеров
broker 1 broker 2 broker 3

partition 0

partition 1

partition 2

partition 3

partition 4

leader
ISR
failed

Слайд 71

Архитектура Kafka Producer

Архитектура Kafka Producer

Слайд 72

Архитектура Kafka Producer message = (key, value)

Архитектура Kafka Producer

message = (key, value)

Слайд 73

Архитектура Kafka Producer message = (key, value)

Архитектура Kafka Producer

message = (key, value)

Слайд 74

Архитектура Kafka Producer message = (key, value) partition = murmur2(key) % partitions

Архитектура Kafka Producer

message = (key, value)
partition = murmur2(key) % partitions

Слайд 75

Архитектура Kafka Producer message = (key, value) partition = murmur2(key) % partitions // key != null

Архитектура Kafka Producer

message = (key, value)
partition = murmur2(key) % partitions //

key != null
Слайд 76

Архитектура Kafka Producer message = (key, value) partition = murmur2(key) % partitions //

Архитектура Kafka Producer

message = (key, value)
partition = murmur2(key) % partitions //

key != null

https://ru.wikipedia.org/wiki/MurmurHash2

Слайд 77

Архитектура Kafka Producer message = (key, value) partition = murmur2(key) % partitions //

Архитектура Kafka Producer

message = (key, value)
partition = murmur2(key) % partitions //

key != null partition = round_robin(partitions)
Слайд 78

Архитектура Kafka Producer message = (key, value) partition = murmur2(key) % partitions //

Архитектура Kafka Producer

message = (key, value)
partition = murmur2(key) % partitions //

key != null partition = round_robin(partitions) // key == null
Слайд 79

Архитектура Kafka Producer message = (key, value)

Архитектура Kafka Producer

message = (key, value)

Слайд 80

Архитектура Kafka Producer replica 0 replica 1 replica 2

Архитектура Kafka Producer

replica 0
replica 1
replica 2

Слайд 81

Архитектура Kafka Producer replica 0 replica 1 replica 2 leader

Архитектура Kafka Producer

replica 0

replica 1
replica 2

leader

Слайд 82

Архитектура Kafka Producer replica 0 replica 1 replica 2 leader ISR ISR

Архитектура Kafka Producer

replica 0

replica 1

replica 2

leader

ISR

ISR

Слайд 83

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

0
Слайд 84

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

0
Слайд 85

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

0

процесс записи

Слайд 86

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

0

процесс записи

Слайд 87

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

1

процесс записи

Слайд 88

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

1

процесс записи

Слайд 89

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

1

процесс записи
успешная запись

Слайд 90

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

1

процесс записи
успешная запись

Слайд 91

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

1

процесс записи
успешная запись

Слайд 92

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

all

процесс записи
успешная запись

Слайд 93

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

all

процесс записи
успешная запись

Слайд 94

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

all

процесс записи
успешная запись

Слайд 95

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

all

процесс записи
успешная запись

Слайд 96

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

all

процесс записи
успешная запись

Слайд 97

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

all

процесс записи
успешная запись

Слайд 98

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

all

процесс записи
успешная запись

Слайд 99

Архитектура Kafka Producer Acknowledgement (ack) – подтверждение записи replica 0 replica 1 replica

Архитектура Kafka Producer

Acknowledgement (ack) – подтверждение записи

replica 0

replica 1

replica 2

acks =

all

min.insync.replicas = 3

процесс записи
успешная запись

Слайд 100

Архитектура Kafka Consumer

Архитектура Kafka Consumer

Слайд 101

Архитектура Kafka Consumer partition 0 partition 1 partition 2

Архитектура Kafka Consumer

partition 0
partition 1
partition 2

Слайд 102

Архитектура Kafka Consumer partition 0 partition 1 partition 2 след. сообщение

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

след. сообщение

Слайд 103

Архитектура Kafka Consumer partition 0 partition 1 partition 2 след. сообщение прочитано

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

след. сообщение
прочитано

Слайд 104

Архитектура Kafka Consumer partition 0 partition 1 partition 2 след. сообщение прочитано

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

след. сообщение
прочитано

Слайд 105

Архитектура Kafka Consumer partition 0 partition 1 partition 2 след. сообщение прочитано

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

след. сообщение
прочитано

Слайд 106

Архитектура Kafka Consumer partition 0 partition 1 partition 2 след. сообщение прочитано

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

след. сообщение
прочитано

Слайд 107

Архитектура Kafka Consumer partition 0 partition 1 partition 2 след. сообщение прочитано

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

след. сообщение
прочитано

Слайд 108

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

0

1

2

3

4

5

6

7

след. сообщение
прочитано

Слайд 109

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

0

1

2

3

4

5

6

7

след. сообщение
прочитано

Слайд 110

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

0

1

2

3

4

5

6

7

след. сообщение
прочитано

Слайд 111

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

0

1

2

3

4

5

6

7

след. сообщение
прочитано

Слайд 112

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

0

1

2

3

4

5

6

7

след. сообщение
прочитано

Слайд 113

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

0

1

2

3

4

5

6

7

след. сообщение
прочитано

Слайд 114

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

0

1

2

3

4

5

6

7

след. сообщение
прочитано

Слайд 115

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1
partition 2

0

1

2

3

4

5

6

7

след. сообщение
прочитано

Слайд 116

Архитектура Kafka Consumer Commit offset partition 0

Архитектура Kafka Consumer

Commit offset

partition 0

Слайд 117

Архитектура Kafka Consumer Commit offset partition 0 прочитано

Архитектура Kafka Consumer

Commit offset

partition 0

прочитано

Слайд 118

Архитектура Kafka Consumer Commit offset partition 0 commit offset прочитано

Архитектура Kafka Consumer

Commit offset

partition 0

commit offset
прочитано

Слайд 119

Архитектура Kafka Consumer Commit offset partition 0 commit offset прочитано

Архитектура Kafka Consumer

Commit offset

partition 0

commit offset
прочитано

Слайд 120

Архитектура Kafka Consumer Commit offset partition 0 commit offset прочитано

Архитектура Kafka Consumer

Commit offset

partition 0

commit offset
прочитано

Слайд 121

Архитектура Kafka Consumer Commit offset partition 0 commit offset прочитано не закоммичено

Архитектура Kafka Consumer

Commit offset

partition 0

commit offset
прочитано
не закоммичено

Слайд 122

Архитектура Kafka Consumer Commit offset partition 0 commit offset прочитано не закоммичено

Архитектура Kafka Consumer

Commit offset

partition 0

commit offset
прочитано
не закоммичено

Слайд 123

Архитектура Kafka Consumer Commit offset partition 0 commit offset прочитано не закоммичено

Архитектура Kafka Consumer

Commit offset

partition 0

commit offset
прочитано
не закоммичено

Слайд 124

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

6

7

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 125

Архитектура Kafka Consumer partition 0 partition 1 partition 2 Consumer Group commit offset прочитано не закоммичено

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 126

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

0

1

2

3

4

5

6

7

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 127

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

0

1

2

3

4

5

6

7

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 128

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

0

1

2

3

4

5

6

7

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 129

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

0

1

2

3

4

5

6

7

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 130

Consumer Group Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1

Consumer Group

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

0

1

2

3

4

5

6

7

commit offset
прочитано
не закоммичено

Слайд 131

Consumer Group Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1

Consumer Group

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

6

7

commit offset
прочитано
не закоммичено

Слайд 132

Consumer Group Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1

Consumer Group

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

6

7

commit offset
прочитано
не закоммичено

Слайд 133

Consumer Group Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1

Consumer Group

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

6

7

commit offset
прочитано
не закоммичено

Слайд 134

Consumer Group Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1

Consumer Group

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

6

7

commit offset
прочитано
не закоммичено

Слайд 135

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

6

7

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 136

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

6

7

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 137

Архитектура Kafka Consumer partition 0 partition 1 partition 2 0 1 2 3

Архитектура Kafka Consumer

partition 0

partition 1

partition 2

0

1

2

3

4

5

6

7

Consumer Group

commit offset
прочитано
не закоммичено

Слайд 138

Слайд 139

Я

Я

Слайд 140

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА… Я

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА…

Я

Слайд 141

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА… НЕТ! УЖЕ ЕСТЬ KAFKA!!! Я

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА…

НЕТ!
УЖЕ ЕСТЬ KAFKA!!!

Я

Слайд 142

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА… НЕТ! УЖЕ ЕСТЬ KAFKA!!! НО У

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА…

НЕТ!
УЖЕ ЕСТЬ KAFKA!!!

НО У НАС

ВСЕГО
100-500 RPS…

Я

Слайд 143

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА… НЕТ! УЖЕ ЕСТЬ KAFKA!!! НО У

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА…

НЕТ!
УЖЕ ЕСТЬ KAFKA!!!

НО У НАС

ВСЕГО
100-500 RPS…

ТОЛЬКО KAFKA!!!
И НЕЧЕГО ДУМАТЬ!!

Я

Слайд 144

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА… НЕТ! УЖЕ ЕСТЬ KAFKA!!! ТОЛЬКО KAFKA!!!

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА…

НЕТ!
УЖЕ ЕСТЬ KAFKA!!!

ТОЛЬКО KAFKA!!!
И НЕЧЕГО

ДУМАТЬ!!

НО У НАС ВСЕГО
100-500 RPS…
… И ДАННЫЕ В ОБЩЕМ-ТО РЕЛЯЦИОННЫЕ…

Я

Слайд 145

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА… НЕТ! УЖЕ ЕСТЬ KAFKA!!! ТОЛЬКО KAFKA!!!

МЫ ХОТИМ ВЫБРАТЬ POSTGRESQL ДЛЯ НОВОГО ПРОЕКТА…

НЕТ!
УЖЕ ЕСТЬ KAFKA!!!

ТОЛЬКО KAFKA!!!
И НЕЧЕГО

ДУМАТЬ!!
KAFKA! KAFKA! KAFKA!

НО У НАС ВСЕГО
100-500 RPS…
… И ДАННЫЕ В ОБЩЕМ-ТО РЕЛЯЦИОННЫЕ…

Я

Слайд 146

Неочевидности в Kafka

Неочевидности в Kafka

Слайд 147

Неочевидности в Kafka … или что мы пережили за год эксплуатации

Неочевидности в Kafka

… или что мы пережили за год эксплуатации

Слайд 148

Неочевидности в Kafka … или что мы пережили за год эксплуатации (в очень кратком изложении)

Неочевидности в Kafka

… или что мы пережили за год эксплуатации
(в очень

кратком изложении)
Слайд 149

Настройки – Как разломать кластер

Настройки – Как разломать кластер

Слайд 150

Настройки – Как разломать кластер log.dirs

Настройки – Как разломать кластер

log.dirs

Слайд 151

Настройки – Как разломать кластер log.dirs replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

replica 0
replica 1

Слайд 152

Настройки – Как разломать кластер log.dirs replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

replica 0
replica 1

Слайд 153

Настройки – Как разломать кластер log.dirs replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

replica 0
replica 1

Слайд 154

Настройки – Как разломать кластер log.dirs replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

replica 0
replica 1

Слайд 155

Настройки – Как разломать кластер log.dirs unclean.leader.election.enable=false replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

unclean.leader.election.enable=false

replica 0
replica 1

Слайд 156

Настройки – Как разломать кластер log.dirs unclean.leader.election.enable=false KIP-106 - Change Default unclean.leader.election.enabled from

Настройки – Как разломать кластер

log.dirs

unclean.leader.election.enable=false
KIP-106 - Change Default unclean.leader.election.enabled from True

to False (0.11)

replica 0
replica 1

Слайд 157

Настройки – Как разломать кластер log.dirs replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

replica 0
replica 1

Слайд 158

Настройки – Как разломать кластер log.dirs replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

replica 0
replica 1

Слайд 159

Настройки – Как разломать кластер log.dirs replica 0 replica 1 Брокер упал ☹

Настройки – Как разломать кластер

log.dirs

replica 0

replica 1

Брокер упал ☹

Слайд 160

Настройки – Как разломать кластер log.dirs https://issues.apache.org/jira/browse/KAFKA-3410 replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

https://issues.apache.org/jira/browse/KAFKA-3410

replica 0
replica 1

Слайд 161

Настройки – Как разломать кластер log.dirs (исправлено в 1.1) https://issues.apache.org/jira/browse/KAFKA-3410 replica 0 replica 1

Настройки – Как разломать кластер

log.dirs

(исправлено в 1.1) https://issues.apache.org/jira/browse/KAFKA-3410

replica 0
replica 1

Слайд 162

Настройки – Настройки по умолчанию (1)

Настройки – Настройки по умолчанию (1)

Слайд 163

Настройки – Настройки по умолчанию (1) - default.replication.factor = 1

Настройки – Настройки по умолчанию (1)

- default.replication.factor = 1

Слайд 164

Настройки – Настройки по умолчанию (1) default.replication.factor = 1 auto.create.topics.enable = true

Настройки – Настройки по умолчанию (1)

default.replication.factor = 1
auto.create.topics.enable = true

Слайд 165

Настройки – Настройки по умолчанию (2)

Настройки – Настройки по умолчанию (2)

Слайд 166

Настройки – Настройки по умолчанию (2) - Настройки Broker, Consumer и Producer должны быть

Настройки – Настройки по умолчанию (2)

- Настройки Broker, Consumer и Producer

должны быть
Слайд 167

Настройки – Настройки по умолчанию (2) - Настройки Broker, Consumer и Producer должны быть согласованы

Настройки – Настройки по умолчанию (2)

- Настройки Broker, Consumer и Producer

должны быть согласованы
Слайд 168

Настройки – Настройки по умолчанию (2) Настройки Broker, Consumer и Producer должны быть согласованы message.max.bytes

Настройки – Настройки по умолчанию (2)

Настройки Broker, Consumer и Producer должны

быть согласованы
message.max.bytes
Слайд 169

Настройки – Настройки по умолчанию (2) Настройки Broker, Consumer и Producer должны быть

Настройки – Настройки по умолчанию (2)

Настройки Broker, Consumer и Producer должны

быть согласованы
message.max.bytes (Broker, 1_000_012)
Слайд 170

Настройки – Настройки по умолчанию (2) Настройки Broker, Consumer и Producer должны быть

Настройки – Настройки по умолчанию (2)

Настройки Broker, Consumer и Producer должны

быть согласованы
message.max.bytes (Broker, 1_000_012)
max.request.size
Слайд 171

Настройки – Настройки по умолчанию (2) Настройки Broker, Consumer и Producer должны быть

Настройки – Настройки по умолчанию (2)

Настройки Broker, Consumer и Producer должны

быть согласованы
message.max.bytes (Broker, 1_000_012)
max.request.size (Producer, 1_048_576)
Слайд 172

Настройки – Настройки по умолчанию (2) Настройки Broker, Consumer и Producer должны быть

Настройки – Настройки по умолчанию (2)

Настройки Broker, Consumer и Producer должны

быть согласованы
message.max.bytes (Broker, 1_000_012)
max.request.size (Producer, 1_048_576)
max.partition.fetch.bytes (Consumer, 1_048_576)
Слайд 173

Настройки – Умножение message.max.bytes (Broker, 1_000_012) max.request.size (Producer, 1_048_576) max.partition.fetch.bytes (Consumer, 1_048_576)

Настройки – Умножение

message.max.bytes (Broker, 1_000_012)
max.request.size (Producer, 1_048_576)
max.partition.fetch.bytes (Consumer, 1_048_576)

Слайд 174

Настройки – Умножение message.max.bytes (Broker, 1_000_012) max.request.size (Producer, 1_048_576) max.partition.fetch.bytes (Consumer, 1_048_576) batch.size (Producer, 16_384)

Настройки – Умножение

message.max.bytes (Broker, 1_000_012)
max.request.size (Producer, 1_048_576)
max.partition.fetch.bytes (Consumer, 1_048_576)
batch.size (Producer, 16_384)

Слайд 175

Настройки – Умножение message.max.bytes (Broker, 1_000_012) max.request.size (Producer, 1_048_576) max.partition.fetch.bytes (Consumer, 1_048_576) batch.size

Настройки – Умножение

message.max.bytes (Broker, 1_000_012)
max.request.size (Producer, 1_048_576)
max.partition.fetch.bytes (Consumer, 1_048_576)
batch.size (Producer, 16_384)
KIP-126 - Allow

KafkaProducer to split and resend oversized batches (0.11)
Слайд 176

API – Блокирующий send

API – Блокирующий send

Слайд 177

API – Блокирующий send - Если мета-данные не доступны – producer.send() блокируется

API – Блокирующий send

- Если мета-данные не доступны – producer.send()
блокируется

Слайд 178

API – Блокирующий send Если мета-данные не доступны – producer.send() блокируется max.block.ms = 60_000

API – Блокирующий send

Если мета-данные не доступны – producer.send()
блокируется
max.block.ms = 60_000

Слайд 179

API – Блокирующий send Если мета-данные не доступны – producer.send() блокируется max.block.ms =

API – Блокирующий send

Если мета-данные не доступны – producer.send()
блокируется
max.block.ms = 60_000
KIP-286: producer.send() should

not block on metadata update (discuss)
Слайд 180

API – Бесконечная десериализация

API – Бесконечная десериализация

Слайд 181

API – Бесконечная десериализация while(true) { ConsumerRecords records = consumer.poll(1_000); for (var record

API – Бесконечная десериализация

while(true) {
ConsumerRecords records = consumer.poll(1_000);
for (var record : records) {
/* do something */
}
}

Слайд 182

API – Бесконечная десериализация try { /* parsing */ } catch (RuntimeException e)

API – Бесконечная десериализация

try {
/* parsing */
} catch (RuntimeException e) {
throw new SerializationException(
"Error deserializing key/value for partition " + partition +
" at offset " + record.offset() +
". If needed, please seek past the record to continue consumption.", e);
}

Слайд 183

API – Бесконечная десериализация try { /* parsing */ } catch (RuntimeException e)

API – Бесконечная десериализация

try {
/* parsing */
} catch (RuntimeException e) {
throw new SerializationException(
"Error deserializing key/value for partition " + partition +
" at offset " + record.offset() +
". If needed, please seek past the record to continue consumption.", e);
}

consumer.seek(partition, offset);

Слайд 184

API – Бесконечная десериализация try { /* parsing */ } catch (RuntimeException e)

API – Бесконечная десериализация

try {
/* parsing */
} catch (RuntimeException e) {
throw new SerializationException(
"Error deserializing key/value for partition " + partition +
" at offset " + record.offset() +
". If needed, please seek past the record to continue consumption.", e);
}

consumer.seek(partition, offset);

Слайд 185

API – Бесконечная десериализация try { /* parsing */ } catch (RuntimeException e)

API – Бесконечная десериализация

try {
/* parsing */
} catch (RuntimeException e) {
throw new SerializationException(
"Error deserializing key/value for partition " + partition +
" at offset " + record.offset() +
". If needed, please seek past the record to continue consumption.", e);
}

consumer.seek(partition, offset);

Слайд 186

API – Бесконечная десериализация try { /* parsing */ } catch (RuntimeException e)

API – Бесконечная десериализация

try {
/* parsing */
} catch (RuntimeException e) {
throw new SerializationException(
"Error deserializing key/value for partition " + partition +
" at offset " + record.offset() +
". If needed, please seek past the record to continue consumption.", e);
}

consumer.seek(partition, offset);

Слайд 187

API – Бесконечная десериализация try { /* parsing */ } catch (RuntimeException e)

API – Бесконечная десериализация

try {
/* parsing */
} catch (RuntimeException e) {
throw new SerializationException(
"Error deserializing key/value for partition " + partition +
" at offset " + record.offset() +
". If needed, please seek past the record to continue consumption.", e);
}

consumer.seek(partition, offset);

Слайд 188

API – Бесконечная десериализация try { /* parsing */ } catch (RuntimeException e)

API – Бесконечная десериализация

try {
/* parsing */
} catch (RuntimeException e) {
throw new SerializationException(
"Error deserializing key/value for partition " + partition +
" at offset " + record.offset() +
". If needed, please seek past the record to continue consumption.", e);
}

consumer.seek(partition, offset);

Слайд 189

API – Бесконечная десериализация try { /* parsing */ } catch (RuntimeException e)

API – Бесконечная десериализация

try {
/* parsing */
} catch (RuntimeException e) {
throw new SerializationException(
"Error deserializing key/value for partition " + partition +
" at offset " + record.offset() +
". If needed, please seek past the record to continue consumption.", e);
}

consumer.seek(partition, offset);

Слайд 190

API – Бесконечная десериализация Наш выбор: кастомный десериализатор, который вернёт null в случае ошибки

API – Бесконечная десериализация

Наш выбор: кастомный десериализатор, который вернёт null
в случае ошибки

Слайд 191

API – Бесконечная десериализация Наш выбор: кастомный десериализатор, который вернёт null в случае

API – Бесконечная десериализация

Наш выбор: кастомный десериализатор, который вернёт null
в случае ошибки
while(true) {
ConsumerRecords records = consumer.poll(1_000);
for (var record : records) {
if (record.getValue() == null) { continue;

}
/* do something */
}
}
Слайд 192

API – Бесконечная десериализация Наш выбор: кастомный десериализатор, который вернёт null в случае

API – Бесконечная десериализация

Наш выбор: кастомный десериализатор, который вернёт null
в случае ошибки
while(true) {
ConsumerRecords records = consumer.poll(1_000);
for (var record : records) {
if (record.getValue() == null) { continue;

}
/* do something */
}
}
Слайд 193

API – НЕчестное чтение

API – НЕчестное чтение

Слайд 194

Чтение по 3 сообщения API – НЕчестное чтение partition 0 partition 1 partition 2

Чтение по 3 сообщения

API – НЕчестное чтение

partition 0
partition 1
partition 2

Слайд 195

Чтение по 3 сообщения API – НЕчестное чтение partition 0 partition 1 partition 2

Чтение по 3 сообщения

API – НЕчестное чтение

partition 0
partition 1
partition 2

Слайд 196

Чтение по 3 сообщения API – НЕчестное чтение partition 0 partition 1 partition 2

Чтение по 3 сообщения

API – НЕчестное чтение

partition 0
partition 1
partition 2

Слайд 197

Чтение по 3 сообщения API – НЕчестное чтение partition 0 partition 1 partition 2

Чтение по 3 сообщения

API – НЕчестное чтение

partition 0
partition 1
partition 2

Слайд 198

Чтение по 3 сообщения API – НЕчестное чтение partition 0 partition 1 partition 2

Чтение по 3 сообщения

API – НЕчестное чтение

partition 0
partition 1
partition 2

Слайд 199

API – НЕчестное чтение - KIP-41: KafkaConsumer Max Records (0.10)

API – НЕчестное чтение

- KIP-41: KafkaConsumer Max Records (0.10)

Слайд 200

API – НЕчестное чтение KIP-41: KafkaConsumer Max Records (0.10) Жадный round-robin

API – НЕчестное чтение

KIP-41: KafkaConsumer Max Records (0.10)
Жадный round-robin

Слайд 201

API – НЕчестное чтение KIP-41: KafkaConsumer Max Records (0.10) Жадный round-robin KIP-387: Fair

API – НЕчестное чтение

KIP-41: KafkaConsumer Max Records (0.10)
Жадный round-robin
KIP-387: Fair Message Consumption Across

Partitions in KafkaConsumer (discuss)
Слайд 202

Рутина – Ограничение на размер топика

Рутина – Ограничение на размер топика

Слайд 203

Рутина – Ограничение на размер топика - log.retention.bytes (Broker, unlimited)

Рутина – Ограничение на размер топика

- log.retention.bytes (Broker, unlimited)

Слайд 204

Рутина – Ограничение на размер топика log.retention.bytes (Broker, unlimited) retention.bytes (Topic)

Рутина – Ограничение на размер топика

log.retention.bytes (Broker, unlimited)
retention.bytes (Topic)

Слайд 205

Рутина – Ограничение на размер топика log.retention.bytes (Broker, unlimited) retention.bytes (Topic) – per partition

Рутина – Ограничение на размер топика

log.retention.bytes (Broker, unlimited)
retention.bytes (Topic) – per

partition
Слайд 206

Рутина – Место на диске

Рутина – Место на диске

Слайд 207

Рутина – Место на диске - Нет автораспределения партиций по новым дискам

Рутина – Место на диске

- Нет автораспределения партиций по новым дискам

Слайд 208

Рутина – Место на диске Нет автораспределения партиций по новым дискам KIP-113: Support

Рутина – Место на диске

Нет автораспределения партиций по новым дискам
KIP-113: Support replicas movement

between log directories (1.1)
Слайд 209

Рутина – Место на диске Нет автораспределения партиций по новым дискам KIP-113: Support

Рутина – Место на диске

Нет автораспределения партиций по новым дискам
KIP-113: Support replicas movement

between log directories (1.1)
Равномерное распределение партиций по количеству
Слайд 210

Рутина – Место на диске Нет автораспределения партиций по новым дискам KIP-113: Support

Рутина – Место на диске

Нет автораспределения партиций по новым дискам
KIP-113: Support replicas movement

between log directories (1.1)
Равномерное распределение партиций по количеству
KIP-178: Size-based log directory selection strategy (discuss)
Слайд 211

Рутина – Новый Брокер

Рутина – Новый Брокер

Слайд 212

Рутина – Новый Брокер - Нет автораспределения партиций на нового Брокера

Рутина – Новый Брокер

- Нет автораспределения партиций на нового Брокера

Слайд 213

Рутина – Новый Брокер Нет автораспределения партиций на нового Брокера Руками делать partition reassignment

Рутина – Новый Брокер

Нет автораспределения партиций на нового Брокера
Руками делать partition reassignment

Слайд 214

Рутина – Новый Брокер Нет автораспределения партиций на нового Брокера Руками делать partition

Рутина – Новый Брокер

Нет автораспределения партиций на нового Брокера
Руками делать partition reassignment
{ "version": 1, "partitions": [
{ "topic": "topic", "partition" : partition,

"replicas": [brokerIds]
},
...
]
}
Слайд 215

Рутина – Новый Брокер Нет автораспределения партиций на нового Брокера Руками делать partition

Рутина – Новый Брокер

Нет автораспределения партиций на нового Брокера
Руками делать partition reassignment
{ "version": 1, "partitions": [
{ "topic": "topic", "partition" : partition,

"replicas": [brokerIds]
},
...
]
}
215
Слайд 216

Рутина – Новый Брокер Нет автораспределения партиций на нового Брокера Руками делать partition

Рутина – Новый Брокер

Нет автораспределения партиций на нового Брокера
Руками делать partition reassignment
{ "version": 1, "partitions": [
{ "topic": "hg2tg", "partition" :

partition, "replicas": [brokerIds]
},
...
]
}
216
Слайд 217

... ] } Рутина – Новый Брокер Нет автораспределения партиций на нового Брокера

...

]

}

Рутина – Новый Брокер

Нет автораспределения партиций на нового Брокера
Руками делать partition reassignment
{ "version": 1, "partitions": [
{ "topic": "hg2tg", "partition" : 42,

"replicas": [brokerIds]
},
Слайд 218

... ] } Рутина – Новый Брокер { "version": 1, "partitions": [ {

...

]

}

Рутина – Новый Брокер

{ "version": 1, "partitions": [
{ "topic": "hg2tg", "partition" : 42, "replicas": [1, 2, 3]
},

Слайд 219

Рутина – Новый Брокер - Preferred leader – первый брокер в списке реплик

Рутина – Новый Брокер

- Preferred leader – первый брокер в списке реплик
{ "version": 1, "partitions": [
{ "topic": "hg2tg", "partition" : 42,

"replicas": [1, 2, 3]
},
...
]
}
Слайд 220

Выводы

Выводы

Слайд 221

Выводы - Внимательное отношение к настройкам

Выводы

- Внимательное отношение к настройкам

Слайд 222

Выводы Внимательное отношение к настройкам Особенности (недоработки?) клиентского API

Выводы

Внимательное отношение к настройкам
Особенности (недоработки?) клиентского API

Слайд 223

Выводы Внимательное отношение к настройкам Особенности (недоработки?) клиентского API Большое количество рутины

Выводы

Внимательное отношение к настройкам
Особенности (недоработки?) клиентского API
Большое количество рутины

Слайд 224

Выводы Внимательное отношение к настройкам Особенности (недоработки?) клиентского API Большое количество рутины Документация о многом умалчивает

Выводы

Внимательное отношение к настройкам
Особенности (недоработки?) клиентского API
Большое количество рутины
Документация о многом

умалчивает
Слайд 225

Выводы Внимательное отношение к настройкам Особенности (недоработки?) клиентского API Большое количество рутины Документация

Выводы

Внимательное отношение к настройкам
Особенности (недоработки?) клиентского API
Большое количество рутины
Документация о многом

умалчивает
Kafka – лучшее, что есть…
Слайд 226

Выводы Внимательное отношение к настройкам Особенности (недоработки?) клиентского API Большое количество рутины Документация

Выводы

Внимательное отношение к настройкам
Особенности (недоработки?) клиентского API
Большое количество рутины
Документация о многом

умалчивает
Kafka – лучшее, что есть… И она классная
Слайд 227

* В СКОРОМ ВРЕМЕНИ *

* В СКОРОМ ВРЕМЕНИ *

Слайд 228

Я

Я

Слайд 229

Я НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ, ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ…

Я

НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ, ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ…

Слайд 230

МНОГО ЖЕ ВСЕГО! ДАВАЙ ДЕТАЛИ! Я НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ, ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ…

МНОГО ЖЕ ВСЕГО! ДАВАЙ ДЕТАЛИ!

Я

НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ, ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ…

Слайд 231

МНОГО ЖЕ ВСЕГО! ДАВАЙ ДЕТАЛИ! ОБЕЩАЮТ ХАЙЛОАД, БИГ-ДАТУ, ВОТ ЭТО ВСЁ! Я НОВЫЙ

МНОГО ЖЕ ВСЕГО! ДАВАЙ ДЕТАЛИ!

ОБЕЩАЮТ ХАЙЛОАД, БИГ-ДАТУ,
ВОТ ЭТО ВСЁ!

Я

НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ,

ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ…
Слайд 232

А-А-А! К ЧЁРТУ ВСЁ!!! Я ОБЕЩАЮТ ХАЙЛОАД, БИГ-ДАТУ, ВОТ ЭТО ВСЁ! МНОГО ЖЕ

А-А-А!
К ЧЁРТУ ВСЁ!!!

Я

ОБЕЩАЮТ ХАЙЛОАД, БИГ-ДАТУ,
ВОТ ЭТО ВСЁ!

МНОГО ЖЕ ВСЕГО! ДАВАЙ ДЕТАЛИ!

НОВЫЙ

ПРОЕКТ НАМЕЧАЕТСЯ, ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ…
Слайд 233

Я НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ, ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ… А-А-А! К ЧЁРТУ ВСЁ!!! KAFKA!

Я

НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ, ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ…

А-А-А!
К ЧЁРТУ ВСЁ!!!
KAFKA! KAFKA! KAFKA!

ОБЕЩАЮТ

ХАЙЛОАД, БИГ-ДАТУ,
ВОТ ЭТО ВСЁ!

МНОГО ЖЕ ВСЕГО! ДАВАЙ ДЕТАЛИ!

Слайд 234

Консистентность и доступность

Консистентность и доступность

Слайд 235

Консистентность и доступность replica 0 replica 1 replica 2

Консистентность и доступность

replica 0
replica 1
replica 2

Слайд 236

Консистентность и доступность replica 0 replica 1 replica 2 acks = 1

Консистентность и доступность

replica 0

replica 1

replica 2

acks = 1

Слайд 237

Консистентность и доступность replica 0 replica 1 replica 2 acks = 1 процесс

Консистентность и доступность

replica 0

replica 1

replica 2

acks = 1

процесс записи
успешная запись недоступность

Слайд 238

Консистентность и доступность replica 0 replica 1 replica 2 acks = 1 процесс записи

Консистентность и доступность

replica 0

replica 1

replica 2

acks = 1

процесс записи

Слайд 239

Консистентность и доступность replica 0 replica 1 replica 2 acks = 1 процесс записи успешная запись

Консистентность и доступность

replica 0

replica 1

replica 2

acks = 1

процесс записи
успешная запись

Слайд 240

Консистентность и доступность replica 0 replica 1 replica 2 acks = 1 процесс записи успешная запись

Консистентность и доступность

replica 0

replica 1

replica 2

acks = 1

процесс записи
успешная запись

Слайд 241

Консистентность и доступность replica 0 replica 1 replica 2 acks = 1 процесс

Консистентность и доступность

replica 0

replica 1

replica 2

acks = 1

процесс записи
успешная запись недоступность

Слайд 242

Консистентность и доступность replica 0 replica 1 replica 2 acks = 1 процесс

Консистентность и доступность

replica 0

replica 1

replica 2

acks = 1

процесс записи
успешная запись недоступность

Слайд 243

unclean leader election Консистентность и доступность replica 0 replica 1 replica 2 acks

unclean leader election

Консистентность и доступность

replica 0

replica 1

replica 2

acks = 1

процесс записи
успешная

запись недоступность
Слайд 244

unclean leader election (но это не точно) Консистентность и доступность replica 0 replica

unclean leader election (но это не точно)

Консистентность и доступность

replica 0

replica 1

replica

2

acks = 1

процесс записи
успешная запись недоступность

Слайд 245

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 3

процесс записи
успешная

запись недоступность
Слайд 246

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 3

процесс записи
успешная

запись недоступность
Слайд 247

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 3

процесс записи
успешная

запись недоступность
Слайд 248

Консистентность и доступность replica 0 replica 1 replica 2 процесс записи успешная запись недоступность

Консистентность и доступность

replica 0

replica 1

replica 2

процесс записи
успешная запись недоступность

Слайд 249

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 250

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 251

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 252

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 253

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 254

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 255

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 256

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 257

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 258

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 259

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 260

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 261

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 262

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 263

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 264

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность
Слайд 265

Консистентность и доступность replica 0 replica 1 replica 2 acks = all min.insync.replicas

Консистентность и доступность

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

процесс записи
успешная

запись недоступность