Eclipse Hono mendukung Apache Kafka untuk pengiriman pesan
Eclipse Hono adalah proyek sumber terbuka untuk menghubungkan sejumlah besar perangkat heterogen ke back end (cloud). Hono mendefinisikan antarmuka layanan yang memungkinkan komunikasi seragam antar perangkat, yang mungkin menggunakan protokol yang sangat berbeda, serta aplikasi bisnis. Proyek ini telah ada selama beberapa waktu sekarang dan telah berhasil digunakan di Bosch IoT Device Management selama beberapa tahun. Apa yang baru adalah sekarang mendukung Apache Kafka untuk pengiriman pesan. Manfaat dan perubahan yang dihasilkan dalam penggunaan Hono diperkenalkan di artikel ini.
Data yang berasal dari perangkat diubah di Hono ke format pesan yang seragam oleh adaptor protokol (misalnya ada beberapa untuk MQTT, HTTP, dan CoAp) dan diteruskan ke sistem pesan. Aplikasi bisnis membaca pesan ini, yang merupakan pesan telemetri atau acara , langsung dari sistem pesan (mereka juga dapat menggunakan Perintah dan Kontrol untuk mengirim pesan ke perangkat dan menerima tanggapan). Untuk pengiriman pesan, yang bukan merupakan bagian dari Hono tetapi harus disediakan secara eksternal, sejauh ini protokol AMQP 1.0 telah digunakan.
Sejak versi 1.7, Hono mendukung Apache Kafka untuk pengiriman pesan sebagai pratinjau teknis . Fitur utama Hono adalah definisi dan implementasi API untuk meneruskan pesan ke dan dari sistem pesan. Karena definisi API didasarkan pada perpesanan dan bergantung langsung pada propertinya, mendukung sistem perpesanan baru adalah inovasi mendasar bagi Hono. Untuk semua API perpesanan di Hono (telemetri , acara , dan perintah dan kontrol ), spesifikasi baru berdasarkan Kafka telah dibuat, baik yang menghadap adaptor protokol maupun aplikasi bisnis. Perhatian dilakukan untuk memastikan bahwa mereka berperilaku semirip mungkin dengan API berbasis AMQP.
Manfaat
Apache Kafka adalah platform streaming acara terdistribusi yang dirancang untuk throughput yang sangat tinggi sambil memberikan jaminan tertentu dalam urutan pesan. Ini sangat cocok untuk persyaratan Hono terkait pengiriman pesan karena beberapa alasan. Manfaat utama adalah:
Penskalaan :Beberapa server Kafka dioperasikan secara bersamaan sebagai cluster yang dapat diperluas sesuai kebutuhan. Kafka dioptimalkan untuk memungkinkan banyak proses menulis dan membaca data secara bersamaan. Dengan AMQP 1.0, beberapa proses juga dapat menggunakan pesan dari alamat yang sama secara paralel. Namun, itu berarti mereka kehilangan pesanan.
Pemesanan pesan :Salah satu fitur inti Kafka adalah mempartisi data dengan menggunakan kunci partisi, yang dapat digunakan untuk memilih data yang urutannya harus dipertahankan dan data yang dapat diproses secara paralel. Di Hono, ini memungkinkan kami dengan mudah memastikan bahwa semua acara 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 digunakan secara paralel, sepenuhnya independen, bahkan dalam beberapa contoh aplikasi bisnis yang digunakan secara bersamaan.
Adopsi skala luas :Kafka digunakan oleh banyak perusahaan dan didukung oleh banyak teknologi lainnya. Beberapa perusahaan menawarkan Kafka sebagai layanan yang dapat dipesan di berbagai platform cloud. Ini memudahkan untuk menyediakan Hono dengan sistem pesan yang dioperasikan secara profesional. Penguncian vendor juga dihindari.
Perubahan
AMQP 1.0 adalah protokol komunikasi di mana rekan-rekan terhubung satu sama lain untuk bertukar pesan. Sebaliknya, cluster Kafka terdiri dari broker yang mengoordinasikan penulisan (dan pembacaan) data ke penyimpanan permanen. Perbedaan ini memiliki dua konsekuensi:Pertama, sebuah pesan tersedia untuk diambil untuk sementara waktu sebelum akhirnya dihapus. Untuk mencapai efek ini di Hono dengan AMQP, Anda biasanya menyediakan broker pesan terpisah di mana acara disimpan untuk menghindari kehilangan pesan jika aplikasi bisnis tidak tersedia untuk sementara. Dengan Kafka, setiap pesan disimpan. Ini termasuk pesan telemetri (waktu penyimpanan, bagaimanapun, tergantung pada konfigurasi topik telemetri di cluster Kafka). Kedua, berkomunikasi melalui penyimpanan permanen memisahkan operasi kirim dan terima dari satu sama lain:Adaptor protokol tidak dapat lagi melaporkan kembali ke perangkat jika saat ini tidak ada konsumen yang terhubung. Sebaliknya, itu hanya menyimpan pesan tanpa "mengetahui" apakah atau kapan aplikasi bisnis akan membacanya.
Mencobanya
Saat memasang Hono, Anda perlu menerapkan jaringan pesan AMQP atau klaster Kafka. Ada juga kemungkinan mengonfigurasi Hono untuk menggunakan keduanya sistem pesan. Kemudian, setiap tenant (subset dari perangkat dan konfigurasi) dapat dikonfigurasi untuk menggunakan AMQP atau Kafka. Proyek Hono menyediakan lingkungan kotak pasir yang dapat diakses publik di Internet tempat Anda dapat bereksperimen dengan Hono menggunakan perpesanan berbasis AMQP atau Kafka.
Contoh praktis
Berikut ini, kami memandu Anda melalui contoh kecil tentang cara menggunakan perpesanan berbasis Apache Kafka di kotak pasir Hono. Anda akan mengirim pesan telemetri ke adaptor protokol HTTP dan kemudian membacanya dari klaster Kafka.
Kami mensimulasikan perangkat yang mendukung Internet dengan mengirimkan perintah HTTP dari baris perintah. Untuk ini, kami menggunakan alat sumber terbuka yang populer curl . Jika saat ini tidak diinstal di komputer Anda, silakan lihat petunjuk instalasi di beranda curl. Untuk mensimulasikan aplikasi bisnis, kami menggunakan klien baris perintah Hono, yang dapat diunduh dari halaman unduhan Hono. Harap dicatat bahwa Java harus diinstal setidaknya di versi 11 untuk menjalankannya.
Jika salah satu perintah yang ditampilkan di bawah ini tidak berfungsi (yang selalu dapat terjadi dengan instruksi seperti itu), silakan merujuk ke Panduan Pesan Kafka di mana penjelasannya mencakup rincian lebih lanjut.
Mendaftarkan perangkat
Pertama, Anda perlu membuat penyewa baru di kotak pasir agar tidak mengganggu pengguna lain. Perintah berikut membuat penyewa dengan ID acak dan mengonfigurasinya untuk menggunakan Kafka untuk pengiriman pesan.
Sekarang setelah Anda mendaftarkan perangkat, Anda dapat mengirim dan menerima pesan.
Buka jendela terminal kedua untuk menerima pesan. Buka direktori tempat Anda mengunduh klien baris perintah Hono. Sekarang mulai klien dengan perintah berikut, pastikan untuk mengganti my-tenant dengan ID penyewa yang baru saja Anda buat:
# di direktori tempat file hono-cli-*-exec.jar telah diunduh $ java -jar hono-cli-*-exec.jar --spring.profiles.active=receiver,sandbox,kafka --tenant.id="my-tenant"
Klien siap menerima pesan jika output berisi baris yang mirip dengan berikut ini: 10:23:01.807 [vert.x-eventloop-thread-0] INFO org.eclipse.hono.cli. app.Receiver - Receiver [penyewa:85f63e23-1b78-4156-8500-debcbd1a8d35, mode:all] berhasil dibuat, tekan ctrl-c untuk keluar
Sekarang Anda dapat mengirim pesan dari perangkat simulasi Anda ke Hono. Untuk melakukan ini, beralih kembali ke jendela terminal pertama. Perintah berikut mengirimkan pesan telemetri ke adaptor protokol HTTP:
Sekarang Anda seharusnya, semoga, berhasil mengirim pesan dari perangkat ke Hono dan menerimanya dari klaster Kafka. Sebagai langkah selanjutnya, Anda dapat melihat contoh yang lebih detail di Panduan Pesan Kafka Hono. Ini juga menunjukkan cara mengirim perintah dari aplikasi bisnis ke perangkat dan meresponsnya. Jika Anda ingin menggali lebih dalam, Anda mungkin ingin melihat spesifikasi API berbasis Kafka, yang dapat ditemukan di Spesifikasi API Hono.
Kesimpulan
Sistem pesan adalah dasar untuk fungsionalitas inti Eclipse Hono karena antarmuka disediakan di atasnya. Mendukung Kafka bersama AMQP 1.0 adalah perubahan yang sangat besar bagi Hono, di mana penekanan besar telah diberikan untuk memastikan bahwa antarmuka dapat dengan mudah dipetakan satu sama lain. Manfaat utama Kafka adalah skalabilitasnya, jaminan pemesanannya, adopsi skala luasnya, dan kekayaan penawaran layanan komersial. Perbedaan utama pengiriman pesan dengan AMQP adalah bahwa semua jenis pesan diperantarai. Artinya pesan dapat tersampaikan meskipun penerima terputus sesaat. Komunikasi juga dipisahkan dalam hal waktu sehingga umpan balik langsung dari penerima ke pengirim pesan tidak mungkin lagi. Dalam contoh praktis singkat, kami menunjukkan cara mengirim pesan dari perangkat simulasi ke sandbox Hono dan menggunakannya dari cluster Kafka.