В чем ключевое различие между брокером сообщений и шиной данных (ESB)?

«В чем ключевое различие между брокером сообщений и шиной данных (ESB)?» — вопрос из категории Архитектура, который задают на 10% собеседований QA Тестировщик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Брокер сообщений (Message Broker) и Шина данных/сервисов (ESB — Enterprise Service Bus) — это разные паттерны интеграции.

Критерий Брокер сообщений (RabbitMQ, Apache Kafka) Шина данных (Apache Camel, MuleSoft)
Основная цель Асинхронная доставка сообщений между приложениями. Интеграция разнородных систем через единую точку входа.
Фокус Надежная передача, буферизация, гарантии доставки. Маршрутизация, трансформация данных, оркестрация сервисов.
Архитектура Децентрализованная (точка-точка или Pub/Sub). Централизованная (все подключения через шину).
Связь Часто однонаправленная (producer → consumer). Двунаправленная, поддерживает сложные workflow.

Пример с брокером (Kafka):

// Producer отправляет сообщение в топик
ProducerRecord<String, String> record = new ProducerRecord<>("orders", "order123", "{...}");
kafkaProducer.send(record);

// Consumer подписывается на топик и обрабатывает сообщения
consumer.subscribe(List.of("orders"));
ConsumerRecords<String, String> records = consumer.poll(Duration.ofSeconds(1));
for (ConsumerRecord<String, String> r : records) {
    processOrder(r.value()); // Асинхронная обработка
}

Пример с шиной (Apache Camel):

// Маршрут в Camel: чтение из FTP, трансформация XML в JSON, запись в REST API
from("ftp://server/orders?delay=5000")
  .unmarshal().jaxb("com.example")
  .process(exchange -> { // Трансформация данных
      Order order = exchange.getIn().getBody(Order.class);
      exchange.getMessage().setBody(toJson(order));
  })
  .to("http://inventory-service/api/update"); // Интеграция с другим сервисом

Вывод: Брокер — это "почтовая служба" для сообщений. Шина — это "контрольный центр", который управляет тем, как, куда и в каком формате данные передаются между системами.