Недавно у меня появилась возможность написать микросервис с использованием NodeJS, который потребляет сообщения из Kafka, преобразует их и выдает в другую тему.
Тем не менее, мне пришлось пройти через интересный этап убеждения коллег-разработчиков и других заинтересованных сторон, почему мы должны использовать микросервис на основе NodeJS вместо Spring Boot.
Существует несколько существующих микросервисов, которые написаны на NodeJS/Python и интегрированы с Kafka. Эти сервисы написаны в течение последних 2-3 лет. Было опробовано несколько библиотек, и, по-видимому, была выбрана лучшая на тот момент (kafka-node). Эти службы работают не в соответствии с ожиданиями и иногда отбрасывают сообщения.
Я следил за пакетом Kafka JS npm, и он выглядит современным и многообещающим, поэтому я предложил его.
Приложив немного дополнительных усилий, я разработал доказательство концепции. Моя цель состояла в том, чтобы решить все проблемы, поднятые другими разработчиками, у которых был неудачный опыт работы со стеком NodeJS + Kafka.
Вот высокоуровневый дизайн –
Основной обязанностью микросервиса является
- Потреблять сообщения в формате Json
- Преобразуйте Json в несколько небольших объектов Json
- Создайте его по нескольким темам Kafka на основе некоторых условий
Я сравнил микросервисы, основанные на Spring Boot, с NodeJS. Ниже приведены мои наблюдения
Конечно, хорошо известно, что NodeJS намного лучше Java с точки зрения потребления ресурсов, мне также пришлось добавить эти детали, чтобы подчеркнуть, что использование NodeJS действительно имеет смысл.
Микросервис на основе NodeJS
Загрузка процессора
Использование Памяти
Микросервис на основе Spring Boot (аналогичная нагрузка)
Загрузка процессора
Использование Памяти
Потребность в ресурсах для Java-приложения в 6 раз больше, чем для приложения NodeJS, как и ежемесячный счет AWS.
Я использовал функцию потоковой передачи, потребляя по одному сообщению за раз, чтобы все было просто. Пакетная обработка требует особой заботы и любви. Пропускная способность может быть увеличена за счет большего количества разделов.
Ниже приведены некоторые из проблем и мой ответ
- Кафка может оказаться ненадежным в долгосрочной перспективе
Использование Kafka неуклонно растет, и у них есть очень поддерживающие разработчики и сообщество. Менее вероятно, что это исчезнет в ближайшем будущем.
- В библиотеке есть несколько открытых выпусков
Существуют открытые проблемы во всех хорошо зарекомендовавших себя технологиях, включая Java и Spring boot. Это не может быть основанием для отклонения предложения. В POC доказано, что необходимая нам функциональность работает нормально.
- Поддерживает ли Kafka конкретную версию и реализацию Kafka, которую мы используем?
Это было доказано в POC
- Поддерживается ли Перебалансировка между Потребителем и Производителем?
Когда один потребитель/производитель выходит из строя, другой процессор должен подключиться к разделу и потреблять/генерировать сообщения. Это было доказано в рамках POC
- Восстанавливается ли он после сбоя брокера и появления другого экземпляра?
Когда один из брокеров выходит из строя, потребительское приложение должно иметь возможность восстановить соединение с новым экземпляром. Это было доказано в POC.
Чтобы доказать, что библиотека KAFKAJ достаточно хороша, я подготовил демонстрационные микросервисы для потребителей и производителей и запускал их в течение 3-4 дней. Эти службы обработали тысячи сообщений за это время, не отбросив ни одного сообщения во всех ситуациях сбоя.
Наконец, POC помог проложить путь для KafkaJS в нашем технологическом стеке. Тем не менее, я действительно ценю свою команду и всех остальных за то, что они выразили обеспокоенность и завершили POC более убедительно.
В конце концов, я также считаю, что какими бы хорошими ни были платформа и технология, от разработчика зависит, как он/она пишет код и заботится о угловых случаях. Разработка не может быть всегда подключи и играй:).
Для получения дополнительной информации о Кавказе перейдите по следующим ссылкам https://kafka.js.org/docs/getting-started https://github.com/tulios/kafkajs https://www.npmjs.com/package/kafkajs
Оригинал: “https://dev.to/ynmanware/springboot-vs-nodejs-with-kafka-5fnj”