Вопрос проверяет знание базовой архитектуры Apache Kafka и её ключевых компонентов, необходимых для понимания работы с распределёнными системами обмена сообщениями.
Apache Kafka — это распределённая платформа для потоковой передачи событий. Чтобы эффективно работать с ней, важно понимать её базовые сущности, которые образуют каркас всей системы. Эти компоненты взаимодействуют друг с другом, обеспечивая надёжную доставку сообщений с высокой пропускной способностью.
Представьте, что продюсер отправляет данные о действиях пользователя в топик 'user-actions'. Топик разбит на 3 партиции. Консьюмеры из одной группы читают эти партиции параллельно, каждый обрабатывает свою часть. Если один брокер выходит из строя, реплики на других брокерах продолжают обслуживать запросы.
// Пример создания топика через CLI
kafka-topics.sh --create --topic user-actions --partitions 3 --replication-factor 2 --bootstrap-server localhost:9092
// Отправка сообщения продюсером (Java)
ProducerRecord<String, String> record = new ProducerRecord<>("user-actions", "user123", "click");
producer.send(record);
// Чтение консьюмером (Java)
ConsumerRecords<String, String> records = consumer.poll(1000);
for (ConsumerRecord<String, String> record : records) {
System.out.println(record.value());
}Понимание этих сущностей необходимо для проектирования надёжных систем обмена данными. Kafka применяется в микросервисной архитектуре, обработке логов, аналитике в реальном времени и других сценариях, где важна масштабируемость и отказоустойчивость.