At Least Once Delivery Consumer
Чек-лист заданий
Полный список дайджестов
Задача - провести perfomance-тест работы потребителя Kafka c Akka и Kafka без Akka
В данном случае потребитель будет непросто вычитывать данные из топика, но и еще запоминать на какой позиции он остановился, чтобы при повторном чтении данных, не получить ту же порцию, что и в прошлый раз.
Какие задачи решены?
- Изучил сеиантики At-least-once-delivery, Exactly-once, At-most-once-delivery
- Написал классы producer’ов с использованием Akka (ReactiveKafkaAtLeastOnceDeliveryConsumer) и без(KafkaAtLeastOnceDeliveryConsumer)
- Рассмотрел коробочные решения, представленные в документации akka
Вывод
Benchmark (limit) Mode Cnt Score Error Units
Benchmarks.c_kafkaAtLeastOnceDeliveryConsumerBench 10000 thrpt 5 0,266 ± 0,003 ops/s
Benchmarks.c_reactiveKafkaAtLeastOnceDeliveryConsumerBench 10000 thrpt 5 0,051 ± 0,001 ops/s
Таким образом мы видим деградацию производительности в 5 при использовании Akka
Краткая памятка по найденному материалу
- Akka предоставляет хранение offset’ов из коробки, что может быть удобным для реализации разных техник или стратегий. Очень хороший пример (правда без сипользования Akka) приводится на конференции Backend Conf 2017, рассказчика Артёма Выборнова (Rambler&Co).
- Akka дает из коробки решения потребления и коммита данных пачками (batch), также Akka дает возможнсть объединять данные не только в пачки, но и в группы, что может дать лучшую производительность для менее активных топиков.