Где находится Apache Kafka в теореме PACELC

Я начинаю узнавать об Apache Kafka. В этой https://engineering.linkedin.com/kafka/intra-cluster-replication-apache-kafka статье говорится, что Kafka - это система CA внутри CAP-теоремы. Поэтому основное внимание уделяется согласованности между репликами, а также общей доступности.

Недавно я слышал о расширении CAP-теоремы под названием PACELC ( https://en.wikipedia.org/wiki/PACELC_theorem). Эта теорема может быть визуализирована так:

Мой вопрос в том, как можно описать Apache Kafka в PACELC. Я думаю, что Kafka сосредотачивается на согласованности, когда возникает раздел, но что иначе, если раздел не возникает? Сосредоточен ли он на низкой латентности или сильной последовательности?

Спасибо!

1 ответ

Решение

Это будет зависеть от вашей конфигурации.

Kafka поддерживается CP ZooKeeper для операций, которые требуют строгой согласованности, таких как выбор контроллера (который определяет лидеров разделов), регистрация брокера, динамические конфигурации, acl-s и т. Д.
Что касается даты, которую вы отправляете в kafka - гарантии настраиваются на уровне производителя, для каждой темы или / и меняются настройки брокера по умолчанию.

Из коробки с конфигурацией по умолчанию (min.insync.replicas=1, default.replication.factor=1) вы получаете систему AP (максимум один раз).

Если вы хотите достичь CP, вы можете установить min.insync.replicas=2 и коэффициент репликации темы 3 - затем производит сообщение с acks=all будет гарантировать установку CP (по крайней мере, один раз), но (как и ожидалось) будет блокироваться в тех случаях, когда недостаточно реплик (<2), доступных для конкретной пары тема / раздел. (см. design_ha, документы по конфигурации производителя)

Трубопровод Кафка может быть дополнительно настроен в одном направлении.

CAP и PACELC
Что касается PACELC, некоторые решения по улучшению задержки уже приняты по умолчанию. Например кафка по умолчанию не fsync Каждое сообщение на диск - оно записывает в pagecache и позволяет ОС справиться с сбросом. По умолчанию предпочитают использовать репликацию для долговечности. Его также можно настроить - смотрите flush.messages, flush.ms Конфигурации брокера / темы.

Из-за общего характера сообщений, которые он получает (это просто поток сообщений) - он не может выполнять слияние после раздела или использовать приемы CRDT, чтобы гарантировать доступность во время раздела и в конечном итоге восстановить согласованность.

Я не вижу / не знаю как ты можешь give up постоянство латентности во время normal operation в случае общего потока Кафки. Вы можете отказаться от строгой согласованности (линеаризуемости) и попытаться добиться " большей согласованности " (охватывающей чуть больше сценариев отказов или уменьшить размер потери данных), но это эффективно настраивает систему AP для более высокой согласованности, а не настраивает CP для более низкой задержки,

Вы могли бы видеть, что компромиссы и конфигурации AP/CP будут представлены как, по крайней мере, один раз, по крайней мере, один раз, по сравнению с единственным.

тестирование
Чтобы понять, как эти параметры влияют на задержку, я думаю, что лучший способ - это проверить вашу настройку с разными параметрами. Следующая команда сгенерирует 1 Гб данных:

kafka-producer-perf-test --topic test --num-records 1000000 --record-size 100 --throughput 10000000 --producer-props bootstrap.servers=kafka:9092 acks=all`

Затем попробуйте использовать разные параметры производителя:

acks=1  
acks=all  
acks=1 batch.size=1000000 linger.ms=1000  
acks=all batch.size=1000000 linger.ms=1000  

Легко запустить кластер и запустить / остановить / убить узлы для тестирования некоторых сценариев отказа, например, с помощью compose.

Ссылки и ссылки
Вы можете проверить (к сожалению, устаревший, но все еще актуальный для темы) тест jepsen и последующее наблюдение, просто чтобы добавить контекст того, как это развивалось с течением времени.

Я настоятельно рекомендую проверить некоторые документы, которые дадут немного больше перспективы:
Критика теоремы CAP. Мартин Клеппманн
CAP Двенадцать лет спустя: как изменились "Правила". Эрик Брюер

Другие вопросы по тегам