Вопрос проверяет понимание Apache Kafka как распределенной платформы для потоковой передачи данных, используемой для построения конвейеров данных и приложений реального времени.
Apache Kafka — это распределенная платформа для потоковой передачи событий (event streaming). Она позволяет публиковать, хранить и обрабатывать потоки данных в реальном времени. В отличие от традиционных брокеров сообщений (например, RabbitMQ), Kafka спроектирована для высокой пропускной способности, отказоустойчивости и долговременного хранения данных.
Предположим, у нас есть микросервис заказов, который должен уведомлять другие сервисы о новых заказах. Вместо прямой интеграции каждый сервис подписывается на topic orders.
// Producer на Node.js
const { Kafka } = require('kafkajs');
const kafka = new Kafka({ clientId: 'order-service', brokers: ['localhost:9092'] });
const producer = kafka.producer();
async function sendOrder(order) {
await producer.connect();
await producer.send({
topic: 'orders',
messages: [{ value: JSON.stringify(order) }],
});
await producer.disconnect();
}
sendOrder({ id: 1, item: 'laptop', amount: 1500 });// Consumer на Node.js
const { Kafka } = require('kafkajs');
const kafka = new Kafka({ clientId: 'notification-service', brokers: ['localhost:9092'] });
const consumer = kafka.consumer({ groupId: 'notification-group' });
async function consumeOrders() {
await consumer.connect();
await consumer.subscribe({ topic: 'orders', fromBeginning: true });
await consumer.run({
eachMessage: async ({ topic, partition, message }) => {
console.log('New order:', message.value.toString());
// Отправляем email или SMS
},
});
}
consumeOrders();Вывод: Apache Kafka — это мощный инструмент для создания масштабируемых, отказоустойчивых систем, где важна надежная передача и долговременное хранение потоков данных. Его стоит применять, когда требуется высокая пропускная способность, гарантии доставки и возможность повторного чтения сообщений.