Ответ
Apache Kafka проектировалась как распределённая система, обеспечивающая свойства AP (Availability и Partition Tolerance) из CAP-теоремы.
- Availability (Доступность): Kafka гарантирует высокую доступность за счёт репликации партиций между несколькими брокерами. Даже при отказе части узлов кластера, система продолжает принимать запись и чтение данных.
- Partition Tolerance (Устойчивость к разделению): Архитектура Kafka изначально устойчива к разделению сети (network partitions), так как данные распределены и реплицированы по кластеру.
Согласованность (Consistency) в Kafka является eventual (конечной). Запись считается успешной после получения подтверждения от кворума реплик из набора ISR (In-Sync Replicas). Однако чтение может временно получать устаревшие данные, пока реплики синхронизируются.
Пример настройки топика с репликацией:
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
try (AdminClient admin = AdminClient.create(props)) {
NewTopic newTopic = new NewTopic("my-topic", 3, (short) 2); // 3 партиции, фактор репликации 2
admin.createTopics(Collections.singleton(newTopic));
}