Похожие презентации:
Apache Kafka
1.
А вы Кафкупробовали?
Apache Kafka – распределённый брокер сообщений
Григорий Кошелев
СКБ Контур
CodeFest, Новосибирск, 2019
1
2.
План1.
2.
3.
4.
5.
Зачем нам Apache Kafka
Введение в Кафку
Архитектура
Неочевидности
Выводы
2
3.
Зачем нам Apache Kafka3
4.
Зачем нам Apache Kafka- Vostok Hercules
https://github.com/vostok
4
5.
Зачем нам Apache Kafka- Vostok Hercules
- Логи
https://github.com/vostok
5
6.
Зачем нам Apache Kafka- Vostok Hercules
- Логи
- Метрики
https://github.com/vostok
6
7.
Зачем нам Apache Kafka- Vostok Hercules
- Логи
- Метрики
- Трассировки
https://github.com/vostok
7
8.
Зачем нам Apache Kafka- Vostok Hercules
-
Логи
Метрики
Трассировки
Бизнес-события
https://github.com/vostok
8
9.
Зачем нам Apache Kafka- Vostok Hercules
- Search & Recommendation Systems (SRS)
9
10.
Зачем нам Apache Kafka- Vostok Hercules [Kafka 2.0+]
- Search & Recommendation Systems (SRS)
10
11.
Зачем нам Apache Kafka-Vostok Hercules [Kafka 2.0+]
-Search & Recommendation Systems (SRS) [Kafka
0.11.x]
11
12.
Блиц-опрос12
13.
Блиц-опросКто использует Apache Kafka?
13
14.
Блиц-опросКто использует Apache Kafka?
Версия…
< 0.11?
14
15.
Блиц-опросКто использует Apache Kafka?
Версия…
< 0.11?
0.11.x?
15
16.
Блиц-опросКто использует Apache Kafka?
Версия…
< 0.11?
0.11.x?
1.x.x?
16
17.
Блиц-опросКто использует Apache Kafka?
Версия…
< 0.11?
0.11.x?
1.x.x?
2.x.x?
17
18.
Введение в Apache Kafka18
19.
Введение в Apache KafkaKafka Producer
Producer
19
20.
Введение в Apache KafkaKafka Consumer
Producer
Consumer
20
21.
Введение в Apache KafkaKafka Cluster
Producer
Cluster
Consumer
21
22.
Введение в Apache KafkaKafka Broker
Producer
Cluster
Broker
Consumer
22
23.
Введение в Apache KafkaCluster
Producer
Broker
Consumer
23
24.
Введение в Apache KafkaKafka Topic
Producer
Cluster
Topic
Broker
Consumer
24
25.
Введение в Apache KafkaPub-Sub с poll-механикой чтения
Cluster
Producer
Topic
Broker
Consumer
25
26.
Архитектура Apache Kafka-
Topic
Broker
Producer
Consumer
26
27.
Архитектура Kafka Topictopic = {partition}
partition 0
0 1 2 3 4 5
partition 1
0 1 2 3 4 5 6 7
partition 2
0 1 2 3 4 5 6
27
28.
Архитектура Kafka Topictopic = {partition}
partition 0
0 1 2 3 4 5 6
partition 1
0 1 2 3 4 5 6 7
partition 2
0 1 2 3 4 5 6
28
29.
Архитектура Kafka Topictopic = {partition}
partition 0
0 1 2 3 4 5 6
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5 6 7
29
30.
Архитектура Kafka Topictopic = {partition}
partition 0
0 1 2 3 4 5 6
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5 6 7
30
31.
Архитектура Kafka Topictopic = {partition}
partition 0
0 1 2 3 4 5 6
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5 6 7
offset = 0
31
32.
Архитектура Kafka Topictopic = {partition}
partition 0
0 1 2 3 4 5 6
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5 6 7
offset = 1
32
33.
Архитектура Kafka Topictopic = {partition}
partition 0
0 1 2 3 4 5 6
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5 6 7
offset = 2
33
34.
Архитектура Kafka Topictopic = {partition}
partition 0
0 1 2 3 4 5 6
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5 6 7
offset = 3
34
35.
Архитектура Kafka Topicpartition = {segment}
35
36.
Архитектура Kafka Topicpartition = {segment}
0 1 2 3 4 5 6 7 8 9 … … … n … … …
36
37.
Архитектура Kafka Topicpartition = {segment}
0 1 2 3 4 5 6 7 8 9 … … … n … … …
segment
37
38.
Архитектура Kafka Topicpartition = {segment}
0 1 2 3 4 5 6 7 8 9 … … … n … … …
segment
38
39.
Архитектура Kafka Topicpartition = {segment}
0 1 2 3 4 5 6 7 8 9 … … … n … … …
segment
39
40.
Архитектура Kafka Topicpartition = {segment}
0 1 2 3 4 5 6 7 8 9 … … … n … … …
base offset
40
41.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
41
42.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
42
43.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
43
44.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
log
44
45.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
log
Index record = (relative offset, posit
45
46.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
log
Index record = (relative offset, posit
offset = 1234567890relative offset = 0
size = 100
position = 0
46
47.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
log
Index record = (relative offset, posit
offset = 1234567891relative offset = 1
size = 100
position = 100
47
48.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
log
Index record = (relative offset, posit
offset = 1234567892relative offset = 2
size = 50
position = 200
48
49.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
log
Index record = (relative offset, posit
offset = 1234567893relative offset = 3
size = 150
position = 250
49
50.
Архитектура Kafka Topicsegment = (base_offset, data, index, timeindex)
00000000001234567890.log
00000000001234567890.index
00000000001234567890.timeindex
50
51.
Архитектура Kafka Brokercluster = {broker}
broker 1
broker 2
broker 3
51
52.
Архитектура Kafka BrokerController – координирует работу кластера
broker 1
broker 2
broker 3
52
53.
Архитектура Kafka Brokertopic = {partition}
broker 1
broker 2
broker 3
partition 0
partition 1
partition 2
partition 3
53
54.
Архитектура Kafka Brokerreplication factor = 3
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
partition 1
partition 1
partition 1
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
54
55.
Архитектура Kafka BrokerДобавление partition
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
partition 1
partition 1
partition 1
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
55
56.
Архитектура Kafka Brokerbroker 1 – leader для partition 0.
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
partition 1
partition 1
partition 1
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
leader
56
57.
Архитектура Kafka Brokerbroker 2 – leader для partition 1
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
partition 1
partition 1
partition 1
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
leader
57
58.
Архитектура Kafka Brokerbroker 3 – leader для partition 2
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
partition 1
partition 1
partition 1
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
leader
58
59.
Архитектура Kafka Brokerbroker 3 – leader для partition 3
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
partition 1
partition 1
partition 1
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
leader
59
60.
Архитектура Kafka Brokerbroker 2 – leader для partition 4
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
partition 1
partition 1
partition 1
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
leader
60
61.
Архитектура Kafka BrokerРепликация с лидера на другие брокеры
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
partition 1
partition 1
partition 1
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
leader
61
62.
Архитектура Kafka BrokerISR (in sync replica) – реплика, синхронизированная с
лидероbrмoker 1
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
62
63.
Архитектура Kafka BrokerВсе реплики синхронизированы
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
63
64.
Архитектура Kafka BrokerНедоступность лидера у partition 2
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
failed
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
64
65.
Архитектура Kafka BrokerВыбор нового лидера в случае недоступности
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
failed
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
65
66.
Архитектура Kafka BrokerРепликация с нового лидера
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
failed
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
66
67.
Архитектура Kafka Brokerbroker 1
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
failed
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
67
68.
Архитектура Kafka BrokerСинхронизация реплики с лидером после
восстаbнroоkвerл1ения
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
failed
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
68
69.
Архитектура Kafka Brokerbroker 1
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
failed
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
69
70.
Архитектура Kafka BrokerПеребалансировка лидеров
broker 1
broker 2
broker 3
partition 0
partition 0
partition 0
leader
partition 1
partition 1
partition 1
ISR
partition 2
partition 2
partition 2
failed
partition 3
partition 3
partition 3
partition 4
partition 4
partition 4
70
71.
Архитектура Kafka Producer71
72.
Архитектура Kafka Producermessage = (key, value)
72
73.
Архитектура Kafka Producermessage = (key, value)
73
74.
Архитектура Kafka Producermessage = (key, value)
partition = murmur2(key) % partitions
74
75.
Архитектура Kafka Producermessage = (key, value)
partition = murmur2(key) % partitions // key != null
75
76.
Архитектура Kafka Producermessage = (key, value)
partition = murmur2(key) % partitions // key != null
https://ru.wikipedia.org/wiki/MurmurHash2
76
77.
Архитектура Kafka Producermessage = (key, value)
partition = murmur2(key) % partitions // key != null
partition = round_robin(partitions)
77
78.
Архитектура Kafka Producermessage = (key, value)
partition = murmur2(key) % partitions // key != null
partition = round_robin(partitions) // key == null
78
79.
Архитектура Kafka Producermessage = (key, value)
79
80.
Архитектура Kafka Producerreplica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
80
81.
Архитектура Kafka Producerreplica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
leader
81
82.
Архитектура Kafka Producerreplica 0
0 1 2 3 4 5 6 7 8
leader
replica 1
0 1 2 3 4 5 6 7 8
ISR
replica 2
0 1 2 3 4 5 6 7 8
ISR
82
83.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 0
83
84.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 0
84
85.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
0 1 2 3 4 5 6 7 8 9
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
процесс записи
acks = 0
85
86.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
0 1 2 3 4 5 6 7 8 9
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
процесс записи
acks = 0
86
87.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
процесс записи
acks = 1
87
88.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
0 1 2 3 4 5 6 7 8 9
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
процесс записи
acks = 1
88
89.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
89
90.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
90
91.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
replica 2
0 1 2 3 4 5 6 7 8 9
acks = 1
91
92.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = all
92
93.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = all
93
94.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = all
94
95.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
replica 2
0 1 2 3 4 5 6 7 8 9
acks = all
95
96.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
replica 2
0 1 2 3 4 5 6 7 8 9
acks = all
96
97.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
replica 2
0 1 2 3 4 5 6 7 8 9
acks = all
97
98.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
replica 2
0 1 2 3 4 5 6 7 8 9
acks = all
98
99.
Архитектура Kafka ProducerAcknowledgement (ack) – подтверждение записи
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
acks = all
replica 2
0 1 2 3 4 5 6 7 8 9
min.insync.replicas = 3
99
100.
Архитектура Kafka Consumer100
101.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
101
102.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
след. сообщение
102
103.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
103
104.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
104
105.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
105
106.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
106
107.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
107
108.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
108
109.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
109
110.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
110
111.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
111
112.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
112
113.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
113
114.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
114
115.
Архитектура Kafka Consumerpartition 0
0 1 2 3 4 5 6 7
след. сообщение
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
115
116.
Архитектура Kafka ConsumerCommit offset
partition 0
0 1 2 3 4 5 6 7
116
117.
Архитектура Kafka ConsumerCommit offset
partition 0
0 1 2 3 4 5 6 7
прочитано
117
118.
Архитектура Kafka ConsumerCommit offset
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
118
119.
Архитектура Kafka ConsumerCommit offset
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
119
120.
Архитектура Kafka ConsumerCommit offset
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
120
121.
Архитектура Kafka ConsumerCommit offset
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
не закоммичено
121
122.
Архитектура Kafka ConsumerCommit offset
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
не закоммичено
122
123.
Архитектура Kafka ConsumerCommit offset
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
не закоммичено
123
124.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
124
125.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
125
126.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
126
127.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
127
128.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
128
129.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
129
130.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
130
131.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
131
132.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
132
133.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
133
134.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
134
135.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
135
136.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
136
137.
Архитектура Kafka ConsumerConsumer Group
partition 0
0 1 2 3 4 5 6 7
commit offset
прочитано
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
не закоммичено
137
138.
138139.
Я139
140.
МЫ ХОТИМ ВЫБРАТЬPOSTGRESQL ДЛЯ
НОВОГО ПРОЕКТА…
Я
140
141.
МЫ ХОТИМ ВЫБРАТЬPOSTGRESQL ДЛЯ
НОВОГО ПРОЕКТА…
НЕТ!
УЖЕ ЕСТЬ KAFKA!!!
Я
141
142.
МЫ ХОТИМ ВЫБРАТЬPOSTGRESQL ДЛЯ
НОВОГО ПРОЕКТА…
НЕТ!
УЖЕ ЕСТЬ KAFKA!!!
НО У НАС ВСЕГО
100-500 RPS…
Я
142
143.
МЫ ХОТИМ ВЫБРАТЬPOSTGRESQL ДЛЯ
НОВОГО ПРОЕКТА…
НО У НАС ВСЕГО
100-500 RPS…
НЕТ!
УЖЕ ЕСТЬ KAFKA!!!
ТОЛЬКО KAFKA!!!
И НЕЧЕГО ДУМАТЬ!!
Я
143
144.
МЫ ХОТИМ ВЫБРАТЬPOSTGRESQL ДЛЯ
НОВОГО ПРОЕКТА…
НО У НАС ВСЕГО
100-500 RPS…
НЕТ!
УЖЕ ЕСТЬ KAFKA!!!
ТОЛЬКО KAFKA!!!
И НЕЧЕГО ДУМАТЬ!!
… И ДАННЫЕ В ОБЩЕМ-ТО
РЕЛЯЦИОННЫЕ…
Я
144
145.
МЫ ХОТИМ ВЫБРАТЬPOSTGRESQL ДЛЯ
НОВОГО ПРОЕКТА…
НО У НАС ВСЕГО
100-500 RPS…
… И ДАННЫЕ В ОБЩЕМ-ТО
РЕЛЯЦИОННЫЕ…
НЕТ!
УЖЕ ЕСТЬ KAFKA!!!
ТОЛЬКО KAFKA!!!
И НЕЧЕГО ДУМАТЬ!!
KAFKA! KAFKA!
KAFKA!
Я
145
146.
Неочевидности в Kafka146
147.
Неочевидности в Kafka… или что мы пережили за год эксплуатации
147
148.
Неочевидности в Kafka… или что мы пережили за год эксплуатации
(в очень кратком изложении)
148
149.
Настройки – Как разломать кластер149
150.
Настройки – Как разломать кластерlog.dirs
150
151.
Настройки – Как разломать кластерlog.dirs
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7
151
152.
Настройки – Как разломать кластерlog.dirs
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7
152
153.
Настройки – Как разломать кластерlog.dirs
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7
153
154.
Настройки – Как разломать кластерlog.dirs
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7
154
155.
Настройки – Как разломать кластерlog.dirs
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7
unclean.leader.election.enable=false
155
156.
Настройки – Как разломать кластерlog.dirs
replica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7
unclean.leader.election.enable=false
KIP-106 - Change Default unclean.leader.election.enabled
from True to False (0.11)
156
157.
Настройки – Как разломать кластерlog.dirs
replica 0
replica 1
0 1 2 3 4 5 6 7
157
158.
Настройки – Как разломать кластерlog.dirs
replica 0
replica 1
0 1 2 3 4 5 6 7
158
159.
Настройки – Как разломать кластерlog.dirs
replica 0
replica 1
0 1 2 3 4 5 6 7
Брокер упал ☹
159
160.
Настройки – Как разломать кластерlog.dirs
replica 0
replica 1
0 1 2 3 4 5 6 7
https://issues.apache.org/jira/browse/KAFKA-3410
160
161.
Настройки – Как разломать кластерlog.dirs
replica 0
replica 1
0 1 2 3 4 5 6 7
(исправлено в 1.1)
https://issues.apache.org/jira/browse/KAFKA-3410
161
162.
Настройки – Настройки поумолчанию (1)
162
163.
Настройки – Настройки поумолчанию (1)
- default.replication.factor = 1
163
164.
Настройки – Настройки поумолчанию (1)
- default.replication.factor = 1
- auto.create.topics.enable = true
164
165.
Настройки – Настройки поумолчанию (2)
165
166.
Настройки – Настройки поумолчанию (2)
- Настройки Broker, Consumer и Producer должны быть
166
167.
Настройки – Настройки поумолчанию (2)
- Настройки Broker, Consumer и Producer должны быть
согласованы
167
168.
Настройки – Настройки поумолчанию (2)
- Настройки Broker, Consumer и Producer должны быть
согласованы
- message.max.bytes
168
169.
Настройки – Настройки поумолчанию (2)
- Настройки Broker, Consumer и Producer должны быть
согласованы
- message.max.bytes (Broker, 1_000_012)
169
170.
Настройки – Настройки поумолчанию (2)
- Настройки Broker, Consumer и Producer должны быть
согласованы
- message.max.bytes (Broker, 1_000_012)
- max.request.size
170
171.
Настройки – Настройки поумолчанию (2)
- Настройки Broker, Consumer и Producer должны быть
согласованы
- message.max.bytes (Broker, 1_000_012)
- max.request.size (Producer, 1_048_576)
171
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)
172
173.
Настройки – Умножение- message.max.bytes (Broker, 1_000_012)
- max.request.size (Producer, 1_048_576)
- max.partition.fetch.bytes (Consumer, 1_048_576)
173
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)
174
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)
175
176.
API – Блокирующий send176
177.
API – Блокирующий send- Если мета-данные не доступны – producer.send()
блокируется
177
178.
API – Блокирующий send- Если мета-данные не доступны – producer.send()
блокируется
- max.block.ms = 60_000
178
179.
API – Блокирующий send- Если мета-данные не доступны – producer.send()
блокируется
- max.block.ms = 60_000
- KIP-286: producer.send() should not block on metadata
update (discuss)
179
180.
API – Бесконечная десериализация180
181.
API – Бесконечная десериализацияwhile(true)
{
ConsumerRecords<Key,
Event> records
consumer.poll(1_000);
for (var record : records)
{
/* do something */
}
}
=
181
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);
182
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.",
}
consumer.seek(partition,
e);
offset);
183
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);
0 1 2 3 4 5 6 7 8
consumer.seek(partition,
offset);
184
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);
0 1 2 3 4 5 6 7 8
consumer.seek(partition,
offset);
185
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);
0 1 2 3 4 5 6 7 8
consumer.seek(partition,
offset);
186
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);
0 1 2 3 4 5 6 7 8
consumer.seek(partition,
offset);
187
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);
0 1 2 3 4 5 6 7 8
consumer.seek(partition,
offset);
188
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);
0 1 2 3 4 5 6 7 8
consumer.seek(partition,
offset);
189
190.
API – Бесконечная десериализацияНаш выбор: кастомный десериализатор, который
вернёт null
в случае ошибки
190
191.
API – Бесконечная десериализацияНаш выбор: кастомный десериализатор, который
вернёт null
в случае ошибки
while(true)
{
ConsumerRecords<Key,
Event> records =
consumer.poll(1_000);
for (var record : records)
{
if (record.getValue()
== null)
{ continue; }
/* do something */
}
}
191
192.
API – Бесконечная десериализацияНаш выбор: кастомный десериализатор, который
вернёт null
в случае ошибки
while(true)
{
ConsumerRecords<Key,
Event> records =
consumer.poll(1_000);
for (var record : records)
{
if (record.getValue()
== null)
{ continue; }
/* do something */
}
}
192
193.
API – НЕчестное чтение193
194.
API – НЕчестное чтениеЧтение по 3 сообщения
partition 0
0 1 2 3 4 5 6 7
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
194
195.
API – НЕчестное чтениеЧтение по 3 сообщения
partition 0
0 1 2 3 4 5 6 7
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
195
196.
API – НЕчестное чтениеЧтение по 3 сообщения
partition 0
0 1 2 3 4 5 6 7
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
196
197.
API – НЕчестное чтениеЧтение по 3 сообщения
partition 0
0 1 2 3 4 5 6 7
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
197
198.
API – НЕчестное чтениеЧтение по 3 сообщения
partition 0
0 1 2 3 4 5 6 7
partition 1
0 1 2 3 4 5 6 7 8
partition 2
0 1 2 3 4 5
198
199.
API – НЕчестное чтение- KIP-41: KafkaConsumer Max Records (0.10)
199
200.
API – НЕчестное чтение- KIP-41: KafkaConsumer Max Records (0.10)
- Жадный round-robin
200
201.
API – НЕчестное чтение- KIP-41: KafkaConsumer Max Records (0.10)
- Жадный round-robin
- KIP-387: Fair Message Consumption Across Partitions in
KafkaConsumer (discuss)
201
202.
Рутина – Ограничение на размертопика
202
203.
Рутина – Ограничение на размертопика
- log.retention.bytes (Broker, unlimited)
203
204.
Рутина – Ограничение на размертопика
- log.retention.bytes (Broker, unlimited)
- retention.bytes (Topic)
204
205.
Рутина – Ограничение на размертопика
- log.retention.bytes (Broker, unlimited)
- retention.bytes (Topic) – per partition
205
206.
Рутина – Место на диске206
207.
Рутина – Место на диске- Нет автораспределения партиций по новым дискам
207
208.
Рутина – Место на диске- Нет автораспределения партиций по новым дискам
- KIP-113: Support replicas movement between log
directories (1.1)
208
209.
Рутина – Место на диске- Нет автораспределения партиций по новым дискам
- KIP-113: Support replicas movement between log
directories (1.1)
- Равномерное распределение партиций по
количеству
209
210.
Рутина – Место на диске- Нет автораспределения партиций по новым дискам
- KIP-113: Support replicas movement between log
directories (1.1)
- Равномерное распределение партиций по
количеству
- KIP-178: Size-based log directory selection strategy
(discuss)
210
211.
Рутина – Новый Брокер211
212.
Рутина – Новый Брокер- Нет автораспределения партиций на нового Брокера
212
213.
Рутина – Новый Брокер- Нет автораспределения партиций на нового Брокера
- Руками делать partition reassignment
213
214.
Рутина – Новый Брокер- Нет автораспределения партиций на нового Брокера
- Руками делать partition reassignment
{ "version":
1,
"partitions":
[
{ "topic":
"topic",
"partition"
"replicas": [brokerIds]
},
...
]
}
: partition,
214
215.
Рутина – Новый Брокер- Нет автораспределения партиций на нового Брокера
- Руками делать partition reassignment
{ "version":
1,
"partitions":
[
{ "topic":
"topic",
"partition"
"replicas": [brokerIds]
},
...
]
}
: partition,
215
216.
Рутина – Новый Брокер- Нет автораспределения партиций на нового Брокера
- Руками делать partition reassignment
{ "version":
1,
"partitions":
[
{ "topic":
"hg2tg", "partition"
"replicas": [brokerIds]
},
...
]
}
: partition,
216
217.
Рутина – Новый Брокер- Нет автораспределения партиций на нового Брокера
- Руками делать partition reassignment
{ "version":
1,
"partitions":
[
{ "topic":
"hg2tg", "partition"
"replicas": [brokerIds]
},
...
]
}
: 42,
217
218.
Рутина – Новый Брокер{ "version":
1,
"partitions":
[
{ "topic":
"hg2tg", "partition"
"replicas": [1, 2,
3]
},
...
]
}
: 42,
218
219.
Рутина – Новый Брокер- Preferred leader – первый брокер в списке реплик
{ "version":
1,
"partitions":
[
{ "topic":
"hg2tg", "partition"
"replicas": [1, 2,
3]
},
...
]
}
: 42,
219
220.
Выводы220
221.
Выводы- Внимательное отношение к настройкам
221
222.
Выводы- Внимательное отношение к настройкам
- Особенности (недоработки?) клиентского API
222
223.
Выводы- Внимательное отношение к настройкам
- Особенности (недоработки?) клиентского API
- Большое количество рутины
223
224.
Выводы- Внимательное отношение к настройкам
- Особенности (недоработки?) клиентского API
- Большое количество рутины
- Документация о многом умалчивает
224
225.
Выводы- Внимательное отношение к настройкам
- Особенности (недоработки?) клиентского API
- Большое количество рутины
- Документация о многом умалчивает
- Kafka – лучшее, что есть…
225
226.
Выводы- Внимательное отношение к настройкам
- Особенности (недоработки?) клиентского API
- Большое количество рутины
- Документация о многом умалчивает
- Kafka – лучшее, что есть… И она классная
226
227.
* В СКОРОМ ВРЕМЕНИ *227
228.
Я228
229.
НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ,ДУМАЕМ НАД ВЫБОРОМ
ТЕХНОЛОГИЙ…
Я
229
230.
НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ,ДУМАЕМ НАД ВЫБОРОМ
ТЕХНОЛОГИЙ…
МНОГО ЖЕ ВСЕГО!
ДАВАЙ ДЕТАЛИ!
Я
230
231.
НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ,ДУМАЕМ НАД ВЫБОРОМ
ТЕХНОЛОГИЙ…
МНОГО ЖЕ ВСЕГО!
ДАВАЙ ДЕТАЛИ!
ОБЕЩАЮТ ХАЙЛОАД,
БИГ-ДАТУ,
ВОТ ЭТО ВСЁ!
Я
231
232.
НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ,ДУМАЕМ НАД ВЫБОРОМ
ТЕХНОЛОГИЙ…
ОБЕЩАЮТ ХАЙЛОАД,
БИГ-ДАТУ,
ВОТ ЭТО ВСЁ!
МНОГО ЖЕ ВСЕГО!
ДАВАЙ ДЕТАЛИ!
А-А-А!
К ЧЁРТУ ВСЁ!!!
Я
232
233.
НОВЫЙ ПРОЕКТ НАМЕЧАЕТСЯ,ДУМАЕМ НАД ВЫБОРОМ
ТЕХНОЛОГИЙ…
ОБЕЩАЮТ ХАЙЛОАД,
БИГ-ДАТУ,
ВОТ ЭТО ВСЁ!
МНОГО ЖЕ ВСЕГО!
ДАВАЙ ДЕТАЛИ!
А-А-А!
К ЧЁРТУ ВСЁ!!!
KAFKA! KAFKA!
KAFKA!
Я
233
234.
Консистентность и доступность234
235.
Консистентность и доступностьreplica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
235
236.
Консистентность и доступностьreplica 0
0 1 2 3 4 5 6 7 8
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
236
237.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
недоступность
237
238.
Консистентность и доступностьreplica 0
0 1 2 3 4 5 6 7 8 9
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
процесс записи
acks = 1
238
239.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
239
240.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
240
241.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
недоступность
241
242.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
недоступность
242
243.
Консистентность и доступностьunclean leader election
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
недоступность
243
244.
Консистентность и доступностьunclean leader election (но это не точно)
replica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
acks = 1
недоступность
244
245.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 3
недоступность
245
246.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 3
недоступность
246
247.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 3
недоступность
247
248.
Консистентность и доступностьreplica 0
0 1 2 3 4 5 6 7 8
процесс записи
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
replica 2
0 1 2 3 4 5 6 7 8
недоступность
248
249.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
249
250.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
250
251.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
251
252.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
252
253.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
253
254.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
254
255.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
255
256.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
256
257.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
257
258.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
258
259.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
259
260.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
260
261.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
261
262.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
262
263.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
263
264.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8
acks = all
replica 2
0 1 2 3 4 5 6 7 8
min.insync.replicas = 2
недоступность
264
265.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
acks = all
replica 2
0 1 2 3 4 5 6 7 8 9
min.insync.replicas = 2
недоступность
265
266.
Консистентность и доступностьreplica 0
процесс записи
0 1 2 3 4 5 6 7 8 9
успешная запись
replica 1
0 1 2 3 4 5 6 7 8 9
acks = all
replica 2
0 1 2 3 4 5 6 7 8 9
min.insync.replicas = 2
недоступность
266