Eclipse Hono теперь поддерживает Apache Kafka для бесшовного обмена сообщениями устройств
Eclipse Hono — open-source проект для подключения больших чисел гетерогенных устройств к (облачному) бэкенду. Hono определяет сервисные интерфейсы, позволяющие унифицированную коммуникацию между устройствами, которые могут использовать широко отличающиеся протоколы, а также бизнес-приложениями. Проект существует уже некоторое время и успешно использовался в Bosch IoT Device Management несколько лет. Новое в том, что теперь он поддерживает Apache Kafka для мессенджинга. Полученные выгоды и изменения в использовании Hono представлены в этой статье.
Данные, приходящие от устройств, трансформируются в Hono в единый формат сообщения протокол-адаптерами (например, есть для MQTT, HTTP, CoAP) и передаются в систему мессенджинга. Бизнес-приложения читают эти сообщения, которые являются либо telemetry messages, либо events, напрямую из системы мессенджинга (они также могут использовать Command and Control для отправки сообщений устройствам и получения ответов). Для мессенджинга, который не является частью Hono, но должен быть предоставлен внешне, до сих пор использовался протокол AMQP 1.0.
С версии 1.7 Hono поддерживает Apache Kafka для мессенджинга как technical preview. Ключевая особенность Hono — определение и имплементация API для форвардинга сообщений к и от системы мессенджинга. Поскольку определения API основаны на мессенджинге и напрямую зависят от его свойств, поддержка новой системы мессенджинга — фундаментальная инновация для Hono. Для всех мессенджинговых API в Hono (telemetry, event и command and control) были созданы новые спецификации на базе Kafka, как с стороны протокол-адаптера, так и с стороны бизнес-приложения. Был принят заботу, чтобы они вели себя максимально похоже на AMQP-базированные API.
Выгоды
Apache Kafka — распределенная event-streaming платформа, спроектированная для очень высокой пропускной способности, предоставляющая определенные гарантии порядка сообщений. Она отлично подходит для требований Hono к мессенджингу по нескольким причинам. Ключевые выгоды:
- Масштабирование: Несколько Kafka-серверов работают одновременно как кластер, который может расширяться по мере необходимости. Kafka оптимизирована для того, чтобы много процессов могли одновременно писать и читать данные. С AMQP 1.0 множественные процессы также могут потреблять сообщения с одного адреса параллельно. Однако это означает, что они теряют свой порядок.
- Порядок сообщений: Одна из ключевых фич Kafka — партиционирование данных с помощью partition key, который можно использовать для выбора данных, для которых порядок должен быть сохранен, и данных, которые могут обрабатываться параллельно. В Hono это позволяет легко гарантировать, что все события от устройства предоставляются бизнес-приложению в правильном порядке. Telemetry данные устройства могут обрабатываться параллельно, и их порядок также гарантирован. Сообщения от всех остальных устройств могут потребляться параллельно, полностью независимо, даже в множественных экземплярах бизнес-приложения, используемых одновременно.
- Широкое принятие: Kafka используется большим числом компаний и поддерживается многими другими технологиями. Несколько компаний предлагают Kafka as a service, который можно бронировать на различных облачных платформах. Это делает легко предоставлять Hono профессионально управляемой системой мессенджинга. Vendor lock-in также избегается.
Изменения
AMQP 1.0 — протокол коммуникации, где пиры соединяются друг с другом для обмена сообщениями. В отличие, Kafka кластер состоит из брокеров, координирующих запись (и чтение) данных в постоянное хранилище. Эта разница имеет два последствия: Во-первых, сообщение доступно для извлечения некоторое время перед тем, как оно в конечном счете удаляется. Чтобы достичь этого эффекта в Hono с AMQP, вы обычно предоставляете отдельный message broker, где events хранятся, чтобы избежать потери сообщений, если бизнес-приложение временно недоступно. С Kafka каждое сообщение хранится. Это включает telemetry сообщения (время хранения, однако, зависит от конфигурации telemetry топиков в Kafka кластере). Во-вторых, коммуникация через постоянное хранилище разделяет операции отправки и получения друг от друга: протокол-адаптер больше не может сообщить обратно устройству, если в данный момент нет подключенного потребителя. Вместо этого он просто хранит сообщения без «знания», если или когда бизнес-приложение их прочитает.
Попробовать
При установке Hono вам нужно развернуть либо AMQP мессенджинговую сеть, либо Kafka кластер. Также есть возможность конфигурировать Hono для использования обоих систем мессенджинга. Тогда каждый tenant (подмножество устройств и конфигурация) может быть сконфигурирован для использования либо AMQP, либо Kafka. Проект Hono предоставляет публично доступную sandbox среду в интернете, где вы можете экспериментировать с Hono, используя AMQP или Kafka-базированный мессенджинг.
Практический пример
В следующем мы проведем вас через небольшой пример того, как использовать Apache Kafka-базированный мессенджинг в Hono sandbox. Вы отправите telemetry сообщение в HTTP протокол-адаптер и затем прочитаете его из Kafka кластера.
Мы симулируем интернет-включенное устройство, отправляя HTTP команды из командной строки. Для этого мы используем популярный open-source инструмент curl. Если в данный момент не установлен на вашем компьютере, пожалуйста, обратитесь к инструкциям по установке на домашней странице curl. Для симуляции бизнес-приложения мы используем командную строку клиента Hono, которую можно скачать со страницы загрузок Hono. Пожалуйста, заметьте, что Java должна быть установлена минимум версии 11 для его запуска.
Если любая из команд, показанных ниже, не сработает (что может всегда случиться с такими инструкциями), пожалуйста, обратитесь к Kafka Messaging Guide, где объяснения покрывают больше деталей.
Регистрация устройства
Сначала вам нужно создать нового tenant в sandbox, чтобы не мешать другим пользователям. Следующая команда создает tenant с случайным ID и конфигурирует его для использования Kafka для мессенджинга.
$ curl -i -H "content-type: application/json" --data-binary '{ "ext": { "messaging-type": "kafka" } }' https://hono.eclipseprojects.io:28080/v1/tenantsВывод должен содержать что-то вроде: {"id":"85f63e23-1b78-4156-8500-debcbd1a8d35"}.
Теперь скопируйте этот ID и установите его как переменную окружения следующим образом:
$ export MY_TENANT=85f63e23-1b78-4156-8500-debcbd1a8d35Зарегистрируйте устройство для tenant:
$ curl -i -X POST https://hono.eclipseprojects.io:28080/v1/devices/$MY_TENANTи еще раз предоставьте возвращенный ID как переменную окружения следующим образом:
$ export MY_DEVICE=4412abe2-f219-4099-ae14-b446604ae9c6Наконец установите пароль для устройства:
$ export MY_PWD=my-pwd $ curl -i -X PUT -H "content-type: application/json" --data-binary '[{ "type": "hashed-password", "auth-id": "'$MY_DEVICE'", "secrets": [{ "pwd-plain": "'$MY_PWD'" }] }]' https://hono.eclipseprojects.io:28080/v1/credentials/$MY_TENANT/$MY_DEVICEОтправка сообщения
Теперь, когда вы зарегистрировали устройство, вы можете отправлять и получать сообщения.
Откройте второе терминальное окно для получения сообщений. Перейдите в директорию, где вы скачали Hono command-line client. Теперь запустите клиент со следующей командой, убедившись, что заменили my-tenant на ID tenant, который вы только что создали:
Клиент готов получать сообщения, если вывод содержит строку, похожую на следующую:
10:23:01.807 [vert.x-eventloop-thread-0] INFO org.eclipse.hono.cli.app.Receiver - Receiver [tenant: 85f63e23-1b78-4156-8500-debcbd1a8d35, mode: all] created successfully, hit ctrl-c to exit
Теперь вы можете отправить сообщение от вашего симулированного устройства в Hono. Для этого вернитесь в первое терминальное окно. Следующая команда отправляет telemetry сообщение в HTTP протокол-адаптер:
$ curl -i -u $MY_DEVICE@$MY_TENANT:$MY_PWD -H "content-type: application/json" --data-binary '{"temp": 42}' https://hono.eclipseprojects.io:8080/telemetryСообщение теперь должно быть напечатано во втором терминале.
Вы также можете отправить event:
$ curl -i -u $MY_DEVICE@$MY_TENANT:$MY_PWD -H "content-type: application/json" --data-binary '{"hello": "kafka"}' https://hono.eclipseprojects.io:8080/eventТеперь вы должны, надеюсь, успешно отправить сообщения от устройства в Hono и получить их из Kafka кластера. Как следующий шаг, вы можете взглянуть на более детальные примеры в Hono's Kafka Messaging Guide. Он также показывает, как отправить команду от бизнес-приложения к устройству и ответить на нее. Если вы хотите копнуть глубже, вы можете посмотреть спецификации Kafka-базированных API, которые можно найти в Hono's API Specifications.
Заключение
Система мессенджинга — фундамент для core функциональности Eclipse Hono, потому что его интерфейсы предоставлены поверх нее. Поддержка Kafka рядом с AMQP 1.0 — очень глубокая перемена для Hono, где большое внимание уделено обеспечению того, что интерфейсы могут быть легко отображены друг на друга. Ключевые выгоды Kafka — ее масштабируемость, гарантии порядка, широкое принятие и множество коммерческих сервисных предложений. Главные отличия от мессенджинга с AMQP — все типы сообщений брокерятся. Это означает, что сообщения могут быть доставлены даже если получатель был отключен на момент. Коммуникация также разделена во времени так, что прямой фидбек от получателя к отправителю сообщения больше невозможен. В кратком практическом примере мы показали вам, как отправлять сообщения от симулированного устройства в Hono sandbox и потреблять их из Kafka кластера.
Промышленные технологии
- Критические температуры сверхпроводимости элементов и высокотемпературных сверхпроводников (Кельвин)
- Диэлектрическая прочность изоляторов — ключевые данные для электроинженеров
- Основные правила дифференцирования: краткий справочник
- Фундаментальные правила интегрирования: константа, сумма и разность
- Eclipse Hono запускает MongoDB-based Device Registry — масштабируемый, production-ready
- Eclipse Hono 1.0.0 запускается: унифицированная open-source IoT connectivity платформа
- Безопасная аутентификация устройств с X.509 сертификатами в Eclipse Hono
- Надежные печатные платы для экстремальных условий: дизайн, преимущества и применения
- Оптимизация дизайна печатных плат для производства: ключевые стратегии и лучшие практики
- Производство печатных плат в эру 5G: тренды и вызовы