Архитектуры, управляемые событиями, приобрели огромную популярность благодаря своей способности создавать масштабируемые и несвязанные системы. Apache Kafka, платформа распределенной потоковой передачи событий, является идеальным выбором для реализации таких архитектур. В этом руководстве мы покажем вам настройку архитектуры, управляемой событиями, с использованием KafkaJS, библиотеки Node.js для взаимодействия с Kafka.

Предварительные условия

Прежде чем мы начнем, убедитесь, что у вас установлены следующие необходимые компоненты:

  • Node.js
  • нпм или пряжа
  • Доступен брокер(ы) Kafka

Шаг 1. Установка KafkaJS

Начните с установки KafkaJS с помощью предпочитаемого вами менеджера пакетов:

npm install kafkajs

Шаг 2: Создание событий

В архитектуре, управляемой событиями, производители отправляют события в темы. Вот как вы можете создать производитель KafkaJS:

const { Kafka } = require('kafkajs');

// Kafka configuration
const kafka = new Kafka({
  clientId: 'my-producer',
  brokers: ['localhost:9092'] // Replace with your Kafka broker addresses
});

// Create producer
const producer = kafka.producer();

// Connect to Kafka broker
async function runProducer() {
  await producer.connect();

  // Send a message to a topic
  await producer.send({
    topic: 'my-topic',
    messages: [{ value: 'Hello, Kafka!' }]
  });

  // Disconnect the producer
  await producer.disconnect();
}

runProducer().catch(console.error);

Шаг 3: Использование событий

Потребители несут ответственность за подписку на темы и обработку сообщений. Вот пример потребителя KafkaJS:

const { Kafka } = require('kafkajs');

// Kafka configuration
const kafka = new Kafka({
  clientId: 'my-consumer',
  brokers: ['localhost:9092'] // Replace with your Kafka broker addresses
});

// Create consumer
const consumer = kafka.consumer({ groupId: 'my-group' });

// Connect to Kafka broker and subscribe to topics
async function runConsumer() {
  await consumer.connect();
  await consumer.subscribe({ topic: 'my-topic', fromBeginning: true });

  // Start consuming messages
  await consumer.run({
    eachMessage: async ({ topic, partition, message }) => {
      console.log(`Received message on ${topic}, partition ${partition}: ${message.value}`);
    }
  });
}

runConsumer().catch(console.error);

Заключение

В этом руководстве вы узнали, как настроить архитектуру, управляемую событиями, с помощью KafkaJS и Node.js. Производители отправляют события в темы Kafka, а потребители подписываются на эти темы и обрабатывают входящие сообщения. Это обеспечивает масштабируемость и слабосвязанность систем, что делает KafkaJS мощным инструментом для создания приложений, управляемых событиями.

Оставайтесь с нами, я буду добавлять больше к архитектуре, управляемой событиями, и микросервисам.