Eclipse Hono Sekarang Mendukung Apache Kafka untuk Messaging Perangkat yang Lancar
Eclipse Hono adalah proyek open source untuk menghubungkan sejumlah besar perangkat heterogen ke backend (cloud). Hono mendefinisikan antarmuka layanan yang memungkinkan komunikasi seragam antara perangkat, yang mungkin menggunakan protokol yang sangat berbeda, serta aplikasi bisnis. Proyek ini telah ada beberapa waktu dan telah digunakan dengan sukses di Bosch IoT Device Management selama beberapa tahun. Yang baru adalah sekarang ia mendukung Apache Kafka untuk messaging. Manfaat dan perubahan dalam penggunaan Hono diperkenalkan dalam artikel ini.
Data yang datang dari perangkat diubah di Hono menjadi format pesan seragam oleh protocol adapters (misalnya, ada beberapa untuk MQTT, HTTP, dan CoAp) dan diteruskan ke sistem messaging. Aplikasi bisnis membaca pesan ini, yang adalah telemetry messages atau events, secara langsung dari sistem messaging (mereka juga dapat menggunakan Command and Control untuk mengirim pesan ke perangkat dan menerima respons). Untuk messaging, yang bukan bagian dari Hono tetapi harus disediakan secara eksternal, protokol AMQP 1.0 telah digunakan sejauh ini.
Sejak versi 1.7, Hono mendukung Apache Kafka untuk messaging sebagai technical preview. Fitur kunci Hono adalah definisi dan implementasi API untuk meneruskan pesan ke dan dari sistem messaging. Karena definisi API didasarkan pada messaging dan bergantung langsung pada propertinya, mendukung sistem messaging baru adalah inovasi fundamental bagi Hono. Untuk semua API messaging di Hono (telemetry, event, dan command and control), spesifikasi baru berdasarkan Kafka dibuat, baik menghadapi protocol adapter maupun aplikasi bisnis. Perhatian diberikan untuk memastikan bahwa mereka berperilaku se Mirip mungkin dengan API berbasis AMQP.
Manfaat
Apache Kafka adalah platform streaming event terdistribusi yang dirancang untuk throughput yang sangat tinggi sambil memberikan jaminan tertentu dalam urutan pesan. Ini cocok untuk kebutuhan Hono mengenai messaging dari beberapa alasan. Manfaat utama adalah:
Scaling: Beberapa server Kafka dioperasikan secara bersamaan sebagai kluster yang dapat diperluas sesuai kebutuhan. Kafka dioptimalkan untuk memungkinkan banyak proses untuk menulis dan membaca data secara bersamaan. Dengan AMQP 1.0, banyak proses juga dapat mengonsumsi pesan dari alamat yang sama secara paralel. Namun, artinya mereka kehilangan urutannya.
Message ordering: Salah satu fitur inti Kafka adalah partisi data melalui partition key, yang dapat digunakan untuk memilih data yang urutannya harus dipertahankan dan data yang dapat diproses secara paralel. Di Hono, ini memungkinkan kami untuk dengan mudah memastikan bahwa semua event dari perangkat disediakan ke aplikasi bisnis dalam urutan yang benar. Data telemetri perangkat dapat diproses secara paralel, dan urutannya juga dijamin. Pesan dari semua perangkat lain dapat dikonsumsi secara paralel, sepenuhnya independen, bahkan dalam beberapa instance aplikasi bisnis yang digunakan secara bersamaan.
Adopsi luas: Kafka digunakan oleh sejumlah besar perusahaan dan didukung oleh banyak teknologi lain. Beberapa perusahaan menawarkan Kafka sebagai layanan yang dapat dipesan di berbagai platform cloud. Ini memudahkan untuk menyediakan sistem messaging yang dioperasikan secara profesional bagi Hono. Vendor lock-in juga dihindari.
Perubahan
AMQP 1.0 adalah protokol komunikasi di mana peers terhubung satu sama lain untuk bertukar pesan. Sebaliknya, kluster Kafka terdiri dari brokers yang mengkoordinasikan penulisan (dan pembacaan) data ke penyimpanan permanen. Perbedaan ini memiliki dua konsekuensi: Pertama, pesan tersedia untuk pengambilan untuk sementara sebelum akhirnya dihapus. Untuk mencapai efek ini di Hono dengan AMQP, biasanya Anda menyediakan message broker terpisah tempat events disimpan untuk menghindari kehilangan pesan jika aplikasi bisnis sementara tidak tersedia. Dengan Kafka, setiap pesan disimpan. Ini mencakup pesan telemetri (waktu penyimpanan, tergantung pada konfigurasi topik telemetri di kluster Kafka). Kedua, berkomunikasi melalui penyimpanan permanen memisahkan operasi kirim dan terima satu sama lain: Protocol adapter tidak lagi dapat melaporkan kembali ke perangkat jika saat ini tidak ada consumer yang terhubung. Alih-alih, itu hanya menyimpan pesan tanpa “mengetahui” jika atau kapan aplikasi bisnis akan membacanya.
Mencobanya
Saat menginstal Hono, Anda perlu men-deploy jaringan messaging AMQP atau kluster Kafka. Ada juga kemungkinan untuk mengonfigurasi Hono untuk menggunakan kedua sistem messaging. Kemudian, setiap tenant (subset perangkat dan konfigurasi) dapat dikonfigurasi untuk menggunakan AMQP atau Kafka. Proyek Hono menyediakan lingkungan sandbox yang dapat diakses publik di Internet di mana Anda dapat bereksperimen dengan Hono menggunakan messaging berbasis AMQP atau Kafka.
Contoh Praktis
Dalam bagian berikut, kami akan memandu Anda melalui contoh kecil tentang cara menggunakan messaging berbasis Apache Kafka di sandbox Hono. Anda akan mengirim pesan telemetri ke protocol adapter HTTP dan kemudian membacanya dari kluster Kafka.
Kami mensimulasikan perangkat yang terkoneksi Internet dengan mengirim perintah HTTP dari command line. Untuk ini, kami menggunakan alat open source populer curl. Jika saat ini belum terinstal di komputer Anda, silakan merujuk ke petunjuk instalasi di halaman utama curl. Untuk mensimulasikan aplikasi bisnis, kami menggunakan command-line client Hono, yang dapat diunduh dari halaman unduhan Hono. Harap dicatat bahwa Java harus terinstal setidaknya versi 11 untuk menjalankannya.
Jika salah satu perintah yang ditunjukkan di bawah ini tidak bekerja (yang selalu dapat terjadi dengan petunjuk seperti ini), silakan merujuk ke Panduan Messaging Kafka di mana penjelasan mencakup lebih banyak detail.
Mendaftarkan perangkat
Pertama, Anda perlu membuat tenant baru di sandbox untuk menghindari gangguan terhadap pengguna lain. Perintah berikut membuat tenant dengan ID acak dan mengonfigurasinya untuk menggunakan Kafka untuk messaging.
Sekarang setelah Anda mendaftarkan perangkat, Anda dapat mengirim dan menerima pesan.
Buka jendela terminal kedua untuk menerima pesan. Pergi ke direktori tempat Anda mengunduh command-line client Hono. Sekarang mulai client dengan perintah berikut, pastikan untuk mengganti my-tenant dengan ID tenant yang baru saja Anda buat:
# in directory where the hono-cli-*-exec.jar file has been downloaded to $ java -jar hono-cli-*-exec.jar --spring.profiles.active=receiver,sandbox,kafka --tenant.id="my-tenant";
Client siap menerima pesan jika output berisi baris seperti berikut: 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
Sekarang Anda dapat mengirim pesan dari perangkat simulasi Anda ke Hono. Untuk ini, kembali ke jendela terminal pertama. Perintah berikut mengirim pesan telemetri ke protocol adapter HTTP:
Sekarang Anda semoga berhasil mengirim pesan dari perangkat ke Hono dan menerima mereka dari kluster Kafka. Langkah selanjutnya, Anda dapat melihat contoh yang lebih detail di Panduan Messaging Kafka Hono. Ini juga menunjukkan kepada Anda cara mengirim perintah dari aplikasi bisnis ke perangkat dan meresponsnya. Jika Anda ingin mengejar lebih dalam, Anda mungkin ingin melihat spesifikasi API berbasis Kafka, yang dapat ditemukan di API Specifications Hono.
Kesimpulan
Sistem messaging adalah fondasi untuk fungsionalitas inti Eclipse Hono karena antarmukanya disediakan di atasnya. Mendukung Kafka bersama dengan AMQP 1.0 adalah perubahan yang sangat mendalam bagi Hono, di mana penekanan besar telah diberikan untuk memastikan bahwa antarmuka dapat dengan mudah dipetakan satu sama lain. Manfaat kunci Kafka adalah skalabilitasnya, jaminan urutannya, adopsi luasnya, dan beragam penawaran layanan komersial. Perbedaan utama dengan messaging AMQP adalah semua jenis pesan di-broker. Artinya pesan dapat diantar bahkan jika penerima terputus untuk sementara. Komunikasi juga terpisah dalam hal waktu sehingga umpan balik langsung dari penerima ke pengirim pesan tidak lagi mungkin. Dalam contoh praktis singkat, kami telah menunjukkan kepada Anda cara mengirim pesan dari perangkat simulasi ke sandbox Hono dan mengonsumsinya dari kluster Kafka.