Кафка
Тарас Войнаровський
Франц Кафка?
Kafka on the Shore
(海辺のカフカ Umibe no Kafuka)
2002
Apache Kafka
Як зберігати великий потік даних так, щоб його ще й читати можна було =)
Taras Voinarovskyi
Collaborator:
- https://github.com/aio-libs/aiokafka - асинхронний клієнт до Kafka для asyncio
- https://github.com/dpkp/kafka-python - Pure Python клієнт для Kafka
Також є confluent-kafka-python та pykafka
Що у нас в програмі?
- Чому потрібні Message Broker'и і чому x1.32xlarge RabbitMQ не зовсім варіант =)
- Архітектура і гарантії, які надає Kafka. Чим це відрізняється від стандартного підходу черг.
- Як і чому ситуація міняється після Kafka 11.
- Q&A
Message broker... Why?
Message broker... Why?
Broker
Варіанти
- RabbitMQ
- ActiveMQ
- Amazon Simple Queue Service
- Google Cloud Pub/Sub
- Kafka
- ...
Параметни
- HA, cluster
- гарантії доставки
- персистентність
- Довготривале накопичення беклогу
- ...
AMQP produce
Producer
Producer
Producer
Topic
- ACK на кожне повідомлення
- Порядок повідомлень не зберігається
- Дублікати при розривах з'єднання
AMQP consume
Consumer
Consumer
Consumer
- QoS забезпечує чесний розподіл
- ACK/NACK на кожне повідомлення
- Повідомлення можуть приходити не впорядковано
Topic
Kafka produce
Producer
Producer
Producer
Partition 0
Partition 1
Partition 2
- ACK на пачку повідомлень
- Порядок повідомлень гарантовано в межах партіції
- Розбиття на партіції по хешу або ручками
Kafka consume
Consumer
Consumer
Consumer
- Партіції можуть мати різний лаг
- Commit на конкретну позицію в партіції
- Порядок в партіції завжди зберігається
Partition 0
Partition 1
Partition 2
...
Kafka 11
Що нового?
- Idempotent producer
- Exactly once consume-produce
- Record Headers
- ...
- Admin client
- Timestamp index and search
- Kafka Streams
Kafka 10.X
Before: Producer duplicates
Idempotent Producer
Transactional Producer
- Атомарний запис в декілька партіцій
- Після коміта скають доступні або всі записи, або ні одного
- Consumer'и можуть бути настроєні для читання в 2 режимах: uncommited, commited
Transactional Producer
Stream processing
Client
Kafka
Consume
Producer.send()
Producer.commit()
Producer.sendOffsetsToTransaction()
Transaction
Need more? =)
- CRC32C
- BenchmarkCrc32KB 90196 ns/op 363.30 MB/s
- BenchmarkCrcCastagnoli32KB 3404 ns/op 9624.42 MB/s
- New record format 35% smaller
- Request quotas
- Heartbeats in background Thread (Kafka 10)
- ...
Я вам посылку принёс
только я вам её не отдам
kafka-python
librdkafka
aiokafka
broker
Exactly once semantics support
- librdkafka 2017 V4
- confluent-kafka-python - після librdkafka
- kafka-python - ХЗ
- aiokafka - ХЗ
~2018
kafka11
By Taras Voinarovskyi
kafka11
- 1,105