Этот вопрос проверяет понимание Apache Kafka как распределённой системы потоковой обработки событий и её роли в построении масштабируемых, отказоустойчивых data pipelines.
Apache Kafka — это распределённая система потоковой обработки событий с открытым исходным кодом, изначально разработанная в LinkedIn. Её основная цель — обеспечить высокопроизводительный, отказоустойчивый и масштабируемый способ обработки потоков данных в реальном времени.
Kafka организует данные вокруг нескольких основных абстракций:
Kafka служит центральной нервной системой для событийно-ориентированных архитектур. Её типичные сценарии использования включают:
Рассмотрим простой сценарий отправки уведомлений о заказах. Производитель (сервис заказов) публикует событие в топик orders. Несколько потребителей могут независимо обрабатывать это событие: сервис уведомлений отправит email, сервис аналитики обновит дашборд, а сервис инвентаря уменьшит количество товара на складе.
// Пример производителя на Python (используя библиотеку kafka-python)
from kafka import KafkaProducer
import json
producer = KafkaProducer(
bootstrap_servers='localhost:9092',
value_serializer=lambda v: json.dumps(v).encode('utf-8')
)
# Публикация события о новом заказе
event = {
'order_id': 12345,
'user_id': 'user_789',
'amount': 99.99,
'status': 'created'
}
producer.send('orders', value=event)
producer.flush()
# Пример потребителя
from kafka import KafkaConsumer
consumer = KafkaConsumer(
'orders',
bootstrap_servers='localhost:9092',
value_deserializer=lambda m: json.loads(m.decode('utf-8')),
group_id='notification-service' // Группа потребителей
)
for message in consumer:
order_data = message.value
print(f"Processing order: {order_data['order_id']}")
# Логика отправки уведомления...Вывод: Kafka стоит применять, когда вам нужна надёжная, высокопроизводительная платформа для обработки непрерывных потоков событий в реальном времени, особенно в микросервисных архитектурах или для построения сложных ETL-конвейеров. Она менее подходит для простых задач очереди сообщений, где достаточно RabbitMQ, или для хранения долгосрочных данных, как базы данных.