Какие брокеры сообщений популярны в экосистеме Python?

Ответ

Брокеры сообщений — это ключевой компонент для построения распределенных и асинхронных систем. Они позволяют сервисам общаться, не зная друг о друге напрямую, что повышает отказоустойчивость и масштабируемость.

Основные брокеры, используемые с Python:

  1. RabbitMQ Один из самых популярных брокеров, реализующий протокол AMQP. Предоставляет гибкие возможности маршрутизации сообщений через обменники (exchanges) и очереди (queues). Идеален для сложных сценариев, где важна гарантированная доставка и порядок сообщений.

    Пример с библиотекой pika:

    import pika
    
    connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
    channel = connection.channel()
    channel.queue_declare(queue='task_queue', durable=True)
    
    channel.basic_publish(
        exchange='',
        routing_key='task_queue',
        body='New task data',
        properties=pika.BasicProperties(delivery_mode=2) # make message persistent
    )
    connection.close()
  2. Apache Kafka Распределенная стриминговая платформа. В отличие от традиционных брокеров, Kafka работает как распределенный лог событий, что обеспечивает высочайшую пропускную способность и отказоустойчивость. Используется для обработки потоков данных в реальном времени, сбора логов и аналитики.

    Пример с confluent-kafka:

    from confluent_kafka import Producer
    
    producer = Producer({'bootstrap.servers': 'localhost:9092'})
    producer.produce('user-logins', key='user1', value='{"status": "success"}')
    producer.flush()
  3. Redis (Pub/Sub) Redis, будучи в первую очередь in-memory хранилищем, предоставляет простой механизм Publish/Subscribe. Он не гарантирует доставку сообщений (если подписчик офлайн, сообщение теряется), но отлично подходит для легковесных систем уведомлений и задач, где скорость важнее надежности.

    Пример с redis-py:

    import redis
    
    r = redis.Redis()
    # Publisher
    r.publish('notifications', 'User logged in')

Системы очередей задач:

  • Celery — это не брокер, а распределенная очередь задач, которая использует брокер (RabbitMQ или Redis) для передачи сообщений. Celery предоставляет высокоуровневый API для выполнения фоновых задач, отложенных вызовов и периодических работ.