Apache Kafka презентация

Содержание

Слайд 2

План

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

Слайд 3

Зачем нам Apache Kafka

Слайд 4

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

Слайд 5

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

- Логи

Слайд 6

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

Логи
Метрики

Слайд 7

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

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

Слайд 8

Зачем нам Apache Kafka

- Vostok Hercules

https://github.com/vostok

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

Слайд 9

Зачем нам Apache Kafka

Vostok Hercules
Search & Recommendation Systems (SRS)

Слайд 10

Зачем нам 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]

Слайд 12

Блиц-опрос

Слайд 13

Блиц-опрос

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

Слайд 14

Блиц-опрос

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

Слайд 15

Блиц-опрос

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

Слайд 16

Блиц-опрос

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

Слайд 17

Блиц-опрос

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

Слайд 18

Введение в Apache Kafka

Слайд 19

Введение в Apache Kafka

Kafka Producer

Producer

Слайд 20

Введение в Apache Kafka

Kafka Consumer

Producer

Consumer

Слайд 21

Введение в Apache Kafka

Kafka Cluster
Cluster
Producer Consumer

Слайд 22

Введение в Apache Kafka

Kafka Broker
Cluster
Producer Broker Consumer

Слайд 23

Введение в Apache Kafka

Producer

Consumer

Broker

Cluster

Слайд 24

Введение в Apache Kafka

Kafka Topic
Cluster
Producer Broker Consumer Topic

Слайд 25

Введение в Apache Kafka

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

Слайд 26

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

Topic
Broker
Producer
Consumer

Слайд 27

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

topic = {partition}

partition 0
partition 1
partition 2

Слайд 28

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

topic = {partition}

partition 0
partition 1
partition 2

Слайд 29

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

topic = {partition}

partition 0
partition 1
partition 2

Слайд 30

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

topic = {partition}

partition 0
partition 1
partition 2

Слайд 31

Архитектура 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

Слайд 33

Архитектура 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

Слайд 35

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

partition = {segment}

Слайд 36

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

partition = {segment}

Слайд 37

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

partition = {segment}

segment

Слайд 38

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

partition = {segment}

segment

Слайд 39

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

partition = {segment}

segment

Слайд 40

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

partition = {segment}

base offset

Слайд 41

Архитектура 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

Слайд 43

Архитектура 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

Слайд 45

Архитектура 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

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

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

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

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

Слайд 51

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

cluster = {broker}
broker 1 broker 2 broker 3

Слайд 52

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

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

Слайд 53

Архитектура 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Слайд 72

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

message = (key, value)

Слайд 73

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

message = (key, value)

Слайд 74

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

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

Слайд 75

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

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

null

Слайд 76

Архитектура 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 // key !=

null partition = round_robin(partitions)

Слайд 78

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

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

null partition = round_robin(partitions) // key == null

Слайд 79

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

message = (key, value)

Слайд 80

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

replica 0
replica 1
replica 2

Слайд 81

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

replica 0

replica 1
replica 2

leader

Слайд 82

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

replica 0

replica 1

replica 2

leader

ISR

ISR

Слайд 83

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

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

replica 0

replica 1

replica 2

acks = 0

Слайд 84

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

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

replica 0

replica 1

replica 2

acks = 0

Слайд 85

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

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

replica 0

replica 1

replica 2

acks = 0

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

Слайд 86

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

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

replica 0

replica 1

replica 2

acks = 0

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

Слайд 87

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

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 88

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

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 89

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

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

replica 0

replica 1

replica 2

acks = 1

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

запись

Слайд 90

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

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

replica 0

replica 1

replica 2

acks = 1

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

запись

Слайд 91

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

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

replica 0

replica 1

replica 2

acks = 1

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

запись

Слайд 92

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

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

replica 0

replica 1

replica 2

acks = all

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

запись

Слайд 93

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

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

replica 0

replica 1

replica 2

acks = all

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

запись

Слайд 94

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

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

replica 0

replica 1

replica 2

acks = all

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

запись

Слайд 95

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

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

replica 0

replica 1

replica 2

acks = all

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

запись

Слайд 96

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

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

replica 0

replica 1

replica 2

acks = all

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

запись

Слайд 97

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

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

replica 0

replica 1

replica 2

acks = all

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

запись

Слайд 98

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

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

replica 0

replica 1

replica 2

acks = all

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

запись

Слайд 99

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

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas =

3

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

Слайд 100

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

Слайд 101

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

partition 0
partition 1
partition 2

Слайд 102

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

partition 0

partition 1
partition 2

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

Слайд 103

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

partition 0

partition 1
partition 2

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

Слайд 104

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

partition 0

partition 1
partition 2

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

Слайд 105

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

partition 0

partition 1
partition 2

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

Слайд 106

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

partition 0

partition 1
partition 2

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

Слайд 107

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

partition 0

partition 1
partition 2

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

Слайд 108

Архитектура 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

4

5

6

7

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

Слайд 110

Архитектура 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

4

5

6

7

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

Слайд 112

Архитектура 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

4

5

6

7

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

Слайд 114

Архитектура 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

4

5

6

7

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

Слайд 116

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

Commit offset

partition 0

Слайд 117

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

Commit offset

partition 0

прочитано

Слайд 118

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

Commit offset

partition 0

commit offset
прочитано

Слайд 119

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

Commit offset

partition 0

commit offset
прочитано

Слайд 120

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

Commit offset

partition 0

commit offset
прочитано

Слайд 121

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

Commit offset

partition 0

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

Слайд 122

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

Commit offset

partition 0

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

Слайд 123

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

Commit offset

partition 0

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

Слайд 124

Архитектура 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
прочитано
не закоммичено

Слайд 126

Архитектура 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

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

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

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

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

2

3

4

5

6

7

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

Слайд 132

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

2

3

4

5

6

7

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

Слайд 134

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

4

5

6

7

Consumer Group

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

Слайд 136

Архитектура 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

4

5

6

7

Consumer Group

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

Слайд 140

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

Я

Слайд 141

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

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

Я

Слайд 142

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

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

НО У НАС ВСЕГО
100-500 RPS…

Я

Слайд 143

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

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

НО У НАС ВСЕГО
100-500 RPS…

ТОЛЬКО

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

Я

Слайд 144

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

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

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

НО У

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

Я

Слайд 145

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

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

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

KAFKA!

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

Я

Слайд 146

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

Слайд 147

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

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

Слайд 148

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

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

Слайд 149

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

Слайд 150

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

log.dirs

Слайд 151

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

log.dirs

replica 0
replica 1

Слайд 152

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

log.dirs

replica 0
replica 1

Слайд 153

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

log.dirs

replica 0
replica 1

Слайд 154

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

log.dirs

replica 0
replica 1

Слайд 155

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

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 True to False

(0.11)

replica 0
replica 1

Слайд 157

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

log.dirs

replica 0
replica 1

Слайд 158

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

log.dirs

replica 0
replica 1

Слайд 159

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

log.dirs

replica 0

replica 1

Брокер упал ☹

Слайд 160

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

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

Слайд 162

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

Слайд 163

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

- default.replication.factor = 1

Слайд 164

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

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

Слайд 165

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

Слайд 166

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

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

Слайд 167

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

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

согласованы

Слайд 168

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

Настройки Broker, Consumer и Producer должны быть согласованы
message.max.bytes

Слайд 169

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

Настройки Broker, Consumer и Producer должны быть согласованы
message.max.bytes

(Broker, 1_000_012)

Слайд 170

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

Настройки Broker, Consumer и Producer должны быть согласованы
message.max.bytes

(Broker, 1_000_012)
max.request.size

Слайд 171

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

Настройки Broker, Consumer и Producer должны быть согласованы
message.max.bytes

(Broker, 1_000_012)
max.request.size (Producer, 1_048_576)

Слайд 172

Настройки – Настройки по умолчанию (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)

Слайд 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)

Слайд 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 (Producer, 16_384)
KIP-126 - Allow KafkaProducer to

split and resend oversized batches (0.11)

Слайд 176

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

Слайд 177

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

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

Слайд 178

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

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

Слайд 179

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

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

on metadata update (discuss)

Слайд 180

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

Слайд 181

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

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

Слайд 182

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) {
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) {
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) {
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) {
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) {
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) {
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) {
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
в случае ошибки

Слайд 191

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

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

Слайд 192

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

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

Слайд 193

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

Слайд 194

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

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

partition 0
partition 1
partition 2

Слайд 195

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

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

partition 0
partition 1
partition 2

Слайд 196

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

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

partition 0
partition 1
partition 2

Слайд 197

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

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

partition 0
partition 1
partition 2

Слайд 198

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

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

partition 0
partition 1
partition 2

Слайд 199

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

- KIP-41: KafkaConsumer Max Records (0.10)

Слайд 200

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

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

Слайд 201

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)

Слайд 204

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

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

Слайд 205

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

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

Слайд 206

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

Слайд 207

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

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

Слайд 208

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

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

directories (1.1)

Слайд 209

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

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

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

Слайд 210

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

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

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

Слайд 211

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

Слайд 212

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

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

Слайд 213

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

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

Слайд 214

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

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

Слайд 215

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

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

Слайд 216

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

Нет автораспределения партиций на нового Брокера
Руками делать 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": [
{ "topic": "hg2tg", "partition" : 42, "replicas": [1, 2, 3]
},

Слайд 219

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

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

Слайд 220

Выводы

Слайд 221

Выводы

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

Слайд 222

Выводы

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

Слайд 223

Выводы

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

Слайд 224

Выводы

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

Слайд 225

Выводы

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

лучшее, что есть…

Слайд 226

Выводы

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

лучшее, что есть… И она классная

Слайд 227

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

Слайд 229

Я

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

Слайд 230

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

Я

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

Слайд 231

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

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

Я

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

ВЫБОРОМ ТЕХНОЛОГИЙ…

Слайд 232

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

Я

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

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

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

ДУМАЕМ НАД ВЫБОРОМ ТЕХНОЛОГИЙ…

Слайд 233

Я

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

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

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

ЭТО ВСЁ!

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

Слайд 234

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

Слайд 235

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

replica 0
replica 1
replica 2

Слайд 236

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

replica 0

replica 1

replica 2

acks = 1

Слайд 237

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 238

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 239

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 240

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 241

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 242

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 243

unclean leader election

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

replica 0

replica 1

replica 2

acks = 1

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

Слайд 244

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

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

replica 0

replica 1

replica 2

acks =

1

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

Слайд 245

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 3

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

Слайд 246

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 3

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

Слайд 247

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 3

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

Слайд 248

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

replica 0

replica 1

replica 2

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

Слайд 249

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 250

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 251

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 252

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 253

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 254

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 255

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 256

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 257

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 258

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 259

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 260

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 261

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 262

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 263

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 264

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Слайд 265

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

replica 0

replica 1

replica 2

acks = all

min.insync.replicas = 2

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

Имя файла: Apache-Kafka.pptx
Количество просмотров: 114
Количество скачиваний: 0