forked from RedHatOfficial/GoCourse
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathkafka_ru.slide
More file actions
272 lines (164 loc) · 10.7 KB
/
kafka_ru.slide
File metadata and controls
272 lines (164 loc) · 10.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
Облачная нативная Kafka для Gophers
Руководство по использованию Kafka и Strimzi в Golang
11 Nov 2024
Tags: golang, go, kafka, strimzi
Aykut Bulgu <aykut@systemcraftsman.com>
Red Hat, Inc. | System Craftsman
https://www.systemcraftsman.com
@SystemCraftsman
* Обо мне
.image ./kafka/images/back_to_the_engineering.png _ 700
* Обо мне
.code ./kafka/aboutme.yaml
* Gophers
.image ./common/fiveyears.jpg _ 900
* Apache Kafka
//Section title
* Что такое Apache Kafka?
.image ./kafka/images/kafka.png _ 600
Apache Kafka - это распределенная система, предназначенная для потоков. Она построена как горизонтально масштабируемый, отказоустойчивый журнал коммитов и позволяет создавать распределенные потоки данных и приложения для обработки потоков.
* Что такое Apache Kafka?
- Разработана в LinkedIn в 2010 году, открыт исходный код в 2011
- Спроектирована быть быстрой, масштабируемой, долговечной и высокодоступной
- Распределенная по дизайну
- Разделение данных (шардинг)
- Высокая пропускная способность
- Способность обрабатывать огромное количество потребителей
* Экосистема Apache Kafka
- **Kafka Core**
- Брокер
- Producer API, Consumer API, Admin API
- Инструменты управления
- Kafka Connect
- Kafka Streams API
- Mirror Maker / Mirror Maker 2
- REST Proxy для соединения HTTP и Kafka
- Schema Registry
* Концепции Apache Kafka - Брокеры и HA
.image ./kafka/images/brokers_ha_1.png _ 800
* Концепции Apache Kafka - Брокеры и HA
.image ./kafka/images/brokers_ha_2.png _ 1000
* Концепции Apache Kafka - Продюсеры
.image ./kafka/images/producers.png _ 900
* Концепции Apache Kafka - Потребители
.image ./kafka/images/consumers.png _ 900
* Случаи использования Apache Kafka
В реальном времени ...
- Обмен сообщениями
- Отслеживание активности
- Обработка потоков
- Интеграция данных
- Метрики
- Агрегация логов
* Облачная нативная Kafka: Strimzi
//Section title
* Облачная нативная Kafka: Strimzi
.image ./kafka/images/strimzi_def.png _ 700
* Почему Strimzi? Почему запускать Kafka на Kubernetes?
- Упрощенное развертывание и управление
- Масштабируемость и гибкость
- Высокая доступность и отказоустойчивость
- Независимость от инфраструктуры
- Операционная эффективность
- Бесшовная интеграция с другими инструментами экосистемы Kubernetes
- Продуктивность разработчиков
* Kubernetes нативная Kafka: Strimzi
.image ./kafka/images/strimzi_arch.png _ 700
* Быстрый взгляд на кластер Kafka в Kubernetes
Оператор Strimzi и предварительно созданный кластер Kafka запущены в нашем локальном кластере Kubernetes в пространстве имен `default`.
.play ./kafka/code/show_operator_state.go /START OMIT/,/END OMIT/
Давайте быстро взглянем на кластер Kafka под названием `kafka-cluster`, используя [Strimzi Kafka CLI](https://github.com/SystemCraftsman/strimzi-kafka-cli). Другой способ - использовать YAML и `kubectl`.
.play ./kafka/code/show_strimzi_cluster.go /START OMIT/,/END OMIT/
* Сторона Golang
//Section title
* Использование Strimzi Kafka с Golang
.image ./kafka/images/gopher_kafka_cook.png _ 600
* Golang клиенты Kafka
Некоторые популярные библиотеки Kafka для Go:
- **Sarama** от Shopify
- **Confluent Kafka Go**
- **kafka-go** от Segment
- **Franz-go** от Twilio
- **Goka** от Lovoo
* Sarama
- Один из наиболее широко используемых Go клиентов для Kafka, разработанный Shopify. Сейчас поддерживается IBM.
- Поддерживает продюсеров и потребителей Kafka, включая синхронную и асинхронную обработку.
- Предоставляет опции конфигурации для повторов сообщений, сжатия и обработки разделов.
- Подходит как для потребителей высокого уровня (как группы потребителей), так и для потребителей низкого уровня (разделов).
Команда для включения библиотеки:
.code ./kafka/code/sarama_producer.go /START1 OMIT/,/END1 OMIT/
* Sarama - Продюсер
.code ./kafka/code/sarama_producer.go /START2 OMIT/,/END2 OMIT/
* Sarama - Потребитель
.code ./kafka/code/sarama_consumer.go /START OMIT/,/END OMIT/
* Confluent Kafka Go
- Разработан Confluent, это Go обертка вокруг библиотеки C/C++ `librdkafka`.
- Предоставляет расширенные возможности для Kafka, включая семантику exactly-once, которая недоступна в Sarama.
- Идеален для корпоративных приложений с потребностью в высокой пропускной способности, низкой задержке и специфических возможностях Confluent.
- Хорошо интегрирован с платформой Confluent и ее функциями, такими как Schema Registry.
Команда для включения библиотеки:
.code ./kafka/code/confluent_producer.go /START1 OMIT/,/END1 OMIT/
* Confluent Kafka Go - Продюсер
.code ./kafka/code/confluent_producer.go /START2 OMIT/,/END2 OMIT/
* Confluent Kafka Go - Потребитель
.code ./kafka/code/confluent_consumer.go /START OMIT/,/END OMIT/
* kafka-go
- Построен Segment, это чистая Go реализация протокола Kafka.
- Подходит для приложений, нуждающихся в более простом API без зависимости от `librdkafka`.
- Предлагает ключевые функциональности, такие как абстракции продюсера, потребителя и ридера, с поддержкой батчинга, сжатия и автоматического создания топиков.
- Поддерживает распределенные приложения, такие как чтение и запись из множественных разделов.
Команда для включения библиотеки:
.code ./kafka/code/kafka_go_producer.go /START1 OMIT/,/END1 OMIT/
* kafka-go - Продюсер
.code ./kafka/code/kafka_go_producer.go /START2 OMIT/,/END2 OMIT/
* kafka-go - Потребитель
.code ./kafka/code/kafka_go_consumer.go /START OMIT/,/END OMIT/
* franz-go
- Недавняя библиотека, разработанная Twilio, которая также предоставляет чистый Go клиент Kafka.
- Фокусируется на высокой производительности и простоте использования с поддержкой групп потребителей, транзакций и пулинга соединений.
- Поддерживает функции Kafka 2.0+, включая лучшую обработку обновлений протокола Kafka.
- Franz-go может быть хорошей альтернативой `kafka-go` благодаря современному подходу и надежной документации.
Команда для включения библиотеки:
.code ./kafka/code/franz_go_producer.go /START1 OMIT/,/END1 OMIT/
* franz-go - Продюсер
.code ./kafka/code/franz_go_producer.go /START2 OMIT/,/END2 OMIT/
* franz-go - Потребитель
.code ./kafka/code/franz_go_consumer.go /START OMIT/,/END OMIT/
* Goka
- Goka - это Go библиотека, специально разработанная для создания приложений обработки потоков с Kafka.
- В отличие от универсальных клиентов Kafka, Goka больше сфокусирована на реализации концепций из Kafka Streams, что делает ее отличным выбором, если вы работаете со stateful обработкой потоков в Go.
* Демо
//Section title
* Кофейня
.image ./kafka/images/coffeeshop.jpg _ 800
[[https://github.com/RedHatTraining/AD482-ToT-CoffeeShop]]
* Кофейня - История
.image ./kafka/images/coffeeshop_history_sync.png _ 700
* Кофейня - История
.image ./kafka/images/coffeeshop_history_async.png _ 700
* Кофейня - Упрощенная
.image ./kafka/images/coffeeshop_arch_diagram.png _ 1000
* Создание топика
Выполните следующую команду Strimzi CLI для создания топика в вашем кластере Strimzi:
.play ./kafka/code/create_topic.go /START OMIT/,/END OMIT/
Детали топика:
.play ./kafka/code/view_topic.go /START OMIT/,/END OMIT/
Откройте IDE для остальной части демо:)
.play ./kafka/code/open_ide.go /START OMIT/,/END OMIT/
* Источник демо
.image ./kafka/images/demo_qr_code.png _ 400
[[https://github.com/SystemCraftsman/coffeeshop-kafka-go-demo]]
* РАЗНОЕ
// Section title
* Библиотека Golang Present
.image ./kafka/images/present.png _ 700
[[https://pkg.go.dev/golang.org/x/tools/present]]
* GoKonf - 23 ноября
.image ./kafka/images/go_konf.jpeg _ 700
[[https://gokonf.com/]]
#last slide
* Больше Gophers
#The Go gopher was designed by Renee French. (http://reneefrench.blogspot.com/)
#Source https://golang.org/doc/gopher/bumper.png
#The design and this image is licensed under the Creative Commons 3.0 Attributions license.
.image ./common/bumper.png _ 900