Apache Kafka adalah broker pesan perangkat lunak terdistribusi yang digunakan untuk memproses data dalam jumlah besar secara real time. Fitur khas Apache Kafka meliputi: keandalan, skalabilitas, dan kinerja tinggi. Dalam pembicaraan tersebut, kami akan menganalisis fitur arsitektur utama dan kasus penggunaan untuk Apache Kafka. Pertimbangkan momen-momen tak terlihat dan garu yang telah kita kumpulkan di jalan Timur.

Halo semuanya! Namaku Grigory! Dan hari ini kita akan berbicara tentang Kafka.
Kami akan memiliki rencana berikut:
- Pertama, saya akan memberi tahu Anda mengapa kita membutuhkan Kafka, apa yang kita lakukan dengannya.
- , , . . Kafka.
- .
- โ - . - ยซ, ยป, .
- . : - .
:
[TOC]
Kafka?
- Vostok.
, . . . Hercules . , , , , .
- , , - .
Kafka .

. . , , . Kafka - . Spark, , . .
Kafka 2 , . . .
? Java stack.
Kafka 0.11, Python, DotNet Kafka 1 . stack โ DotNet, . Kafka .
Kafka , . , - . - . .

, Apache Kafka
Apache Kafka
, , , Kafka . โ producer. Producer โ , -.

consumer. , - .

. , Apache Kafka โ . , .

.

.

, producer consumer , . , Message Queue. , .

Publish-Subscribe, . . , consumers . consumers.
, poll-, . . : ยซ, consumer, . ยป. consumer Kafka : ยซ - ?ยป. .
, , consumers.
Apache Kafka
- Topic
- Broker
- Producer
- Consumer
4 . , , producer consumer. .
Kafka Topic

โ , producers, consumers. - . โ .
. . ?

- .

- . , .

, offset. 0.
. Offset = 0

.

. , . , .
- .

.

, . . 1 , 2 . .

.

- . , . , . .

.
offset, .

. offset .

, , . data, index, timeindex โ .

Data โ , . . - . . . Kafka , , .

index? - , . index .

. index 8 . int: relative offset, positon.
Relative offset โ .
offset , offset, .
, offset int. , offset int.
position. Position โ -.

, relative offset , .

-.

. , . offset relative offset , .
, , - . , . Kafka.

timeindex. ? Kafka - . . Timeindex .
Kafka Broker

, . โ .
.

. .

, . . .
Kafka , replication factor . , .

, . , .
4 , .
Kafka .

, , .
โ , . producers , .
. , . .

โ , . . - , - .

.

, . .
Kafka , , -, . , .

? , , . , , follower. .

, , , in sync replica. , .

, . . in sync replica.
, - . follower, ? ? follower . , .

, ?
3 2, . , .

Kafka , . . , .

. .

, , , , .

. . . .

Kafka , โ .

? , . . , . Kafka . , .
Kafka Producer

, . . , .
. , , .
Kafka , โ , , . , . consumer , .

? , . MurmurHash , .

, round robin, , . . , ..
point: . . . - , . . , , . .
, Kafka , . โ offset, timestamp . .

. . .
. 9 .

, . Kafka, acknowledgement, . . . ,

. ?

. , .

.
Kafka, . - . 0 . . .

. 1.

? . Kafka. Kafka . .

. , .

, .
?

Followers : ยซ ?ยป. : ยซยป. . . . , , .

, , . all, .

? .

, .

followers .

, . , .

, , , , .

, .
. min.insync.replicas.

3, , , 3 , . . + 2.
, , , , -1
.
Kafka Consumer

, consumer. . consumer . , . - .

, .




.

?

- .

.

- .




version polled Kafka . , , .
. , , . , . . , Kafka. , commit offset.

?

consumer, .

, , . Kafka: ยซ ยป. , .

- .

. . . .

consumer , , .

.

, .
- .

consumer, .

. ? , consumer , consumer . , Kafka .

consumers . .

, .

- offset, .

, .

โ , -.

? -, .

.

consumer .

.

.

consumer , . .

- , .
, , . , .
Kafka
.
, .
, - .
, Kafka.
โ
. ? . .
Kafka. log.dirs. , , .

. , - .
โ , . , , , .

?

1 , . GC .
. , . Kafka , . , .

โ unclean.leader.election.enable=false. 0.11 .
KIP-106 โ Change Default unclean.leader.election.enabled from True to False (0.11)

. . . ? , .
. , . ? , . . 1 - , 0 .
, 0.

1 , . .
, , . , , .

https://issues.apache.org/jira/browse/KAFKA-3410
Kafka . , 1.1.
. .
โ

. . default.replication.factor = 1.
, . , Kafka , dev- , , default.replication.factor - , . .
, replication.factor, .

โ auto.create.topics.enable = true.
. ? , , - , Kafka : ยซ, - ยป. . , . . replication.factor =1. production, replication.factor, - replication.factor = 1. , - . - .
, , .

. , , , consumer . , .
, Kafka .

, message.max.bytes. 1 000 012 .
? , . , Kafka.

, , . , . consumer , . , consumer , , . - . Kafka Java , Scala.
? - , , , production. , , . . . , .
.
โ

. . , . . , Kafka .
Kafka , batch.size. , . 16 โ , Kafka- , . . . Kafka, , . , . .
. , 10. . . 160 performance.
, , .
production. , 10. , 160 , 10 . production 1,5 .
? , , . . , . . - . - . .
?

, Kafka KIP-126 โ Allow KafkaProducer to split and resend
oversized batches (0.11)
KIP (Kafka Improvement Proposals) โ , Kafka, . . .
KIP 0.11 . Kafka producer, , - , Kafka.
, . , . , . , , , , .
, . . . .
. : ยซ ยป. . , . .
API โ send
API, send. ? , Kafka API, . . , Kafka, future. . , , . , send , . . future , . โ , . , , , . . . . , . 60 .
. - , . , , Kafka , .

KIP-286: producer.send() should not block on metadata update (discuss)
, ? , , , . , : ยซ ยป. KIP discuss. , - . , Kafka . , .
API โ

, . , , consumer. , poll-, . . consumer Kafka . , consumer :
, Kafka. - - . , . .
consumer.poll ConsumerRecords. Key Event. - , . - Kafka , ?
, . , , . , . .

? fetcher, stack trace , poll.
, message exception: , - - offset. , - . โ , . , . offset, offset.
, exception, , partition, , . , , offset .
, , . , .

, . .

.

, . , , .

. ?

, ? . . .
, ?
, .

, exception, . null, .
, .

. . , , , , , .
, consumer.
API โ

. . .
, . .

.

, , , , .

, . .

?

KIP-41: KafkaConsumer Max Records (0.10).
, , . KIP .
round robin, . consumerโ . . , . , . .

KIP-387: Fair Message Consumption Across Partitions in KafkaConsumer (discuss)
Google: ยซ ?ยป. KIP โ .
discuss. , , , , -. , , . . .
โ

. DevOps. .
- : ยซ . ? ยป. . , .
, . โ retention.bytes.
Retention.bytes , . . log.retention.bytes โ , .
, , per partition, . . .
. โ 1 . 3 โ . . . , .
, .
โ

KIP-113: Support replicas movement between log directories (1.1)
, , , Kafka . , KIP, . , , . ! , ยซยป.
Kafka - ยซยป. . - , . , .
- , - , - . , - .
, . , .

KIP-178: Size-based log directory selection strategy (discuss)
KIP, - , discuss, . . , . , .
โ

, ? . .
. bash-, partition reassignment.
ยซยป, , JSON, bash-, - .
:
, - .
. . , , .

ยซยป.

preferred leader. , , , , โ ? .
, JSON. , , . , . , .

? ?
. . .
API. , . , .
, DevOps
, . KIP . , , , .
! Kafka โ , . .
, . !
, , ? . . , ? , , โ , 3 , 4, ?
. : โ . ? , . . , . . . partition reassignments. , , . , . , bash- . 5 , 10 . .
, , . .
! Kafka . , , consumers . -, Kafka. , , bash-, - , , . -. true way, , . , .
! , partitions ? , partitions ?
, . , , , . , , . , ( value ), . compaction. Kafka , , , , 10 . . . , , . .
. - best practices partitions, . . consumers consumer groups?
. , , , โ . ? , . , , . , consumer group , . - consumers , , . . . .
! ! , ? . - ?
. , , . . , . , Dot Net . โ - -.
! , Kafka, . . Kubernetes? Kubernetes, helm charts ? failed offset commit?
Kubernetes. Kubernetes , . . Kafka Kubernetes . . . . , Kafka Kubernetes, . failed commit offset, , , consumers . Consumer, , , . , : ยซ ยป . . . . GC consumer, . , , , .
. . , consumer . ? , , . , , consumers . consumers . . . . , consumers. -. . .
! consumers, . . , , , , consumer?
, consumer , . . , consumer 3 , . .
! . user case, Kafka ? Postgres, , Kafka , Postgres. , .
Hal yang paling absurd dipilih secara khusus di sana. Saya ingin menunjukkan situasi yang absurd dalam arti bahwa ketika Anda mengenal Kafka, dengan hal-hal arsitekturalnya, Anda akan melihat betapa bagusnya pembuatannya dan hanya jatuh cinta pada teknologi. Teknologi ini sangat keren. Ini adalah poinnya. Ini bukan tentang mengganti Postgres dengan Kafka. Tidak, tentu saja tidak.
Untuk apa kami menggunakan Kafka? Kami memiliki banyak layanan mikro, ribuan instans diluncurkan. Kami mengumpulkan log dari mereka, dan kedepannya masih ada tugas untuk dilacak, yaitu kami ingin mengumpulkan informasi tentang interaksi jaringan antar layanan mikro melalui Kafka. Dan juga metrik, aplikasi, yaitu jumlah permintaan, kesalahan, dll.