Apache Kafka es un agente de mensajes de software distribuido que se utiliza para procesar grandes cantidades de datos en tiempo real. Las características distintivas de Apache Kafka incluyen: confiabilidad, escalabilidad y alto rendimiento. En la charla, analizaremos las principales características arquitectónicas y casos de uso de Apache Kafka. Considere los momentos no obvios y los rastrillos que hemos recopilado en el camino del Este.

¡Hola a todos! ¡Mi nombre es Grigory! Y hoy hablaremos de Kafka.
Tendremos el siguiente plan:
- Kafka, .
- , , . . 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. , .
Allí se seleccionó especialmente lo más absurdo. Quería mostrar una situación absurda en el sentido de que cuando te familiarizas con Kafka, con sus elementos arquitectónicos, ves lo bien que están hechos y simplemente te enamoras de la tecnología. La tecnología es realmente genial. Este era el punto. No se trata de reemplazar Postgres con Kafka. No claro que no.
¿Para qué estamos usando Kafka? Tenemos un montón de microservicios, miles de instancias lanzadas. Recopilamos registros de ellos, y en el futuro todavía hay una tarea de rastreo, es decir, queremos agregar información de interacciones de red entre microservicios a través de Kafka. Y también métricas, aplicaciones, es decir, el número de solicitudes, errores, etc.