Apa itu Azure Event Hubs untuk Apache Kafka

Artikel ini menjelaskan bagaimana Anda dapat menggunakan Azure Event Hubs untuk mengalirkan data dari aplikasi Apache Kafka tanpa menyiapkan kluster Kafka sendiri.

Catatan

Fitur ini hanya didukung di tingkat standar, premium , dan khusus .

Gambaran Umum

Azure Event Hubs menyediakan titik akhir Apache Kafka di hub peristiwa, yang memungkinkan pengguna untuk terhubung ke pusat aktivitas menggunakan protokol Kafka. Anda sering dapat menggunakan titik akhir Kafka pusat aktivitas dari aplikasi Anda tanpa perubahan kode apa pun. Anda hanya memodifikasi konfigurasi, yaitu, memperbarui string koneksi dalam konfigurasi untuk menunjuk ke titik akhir Kafka yang diekspos oleh hub peristiwa Anda alih-alih menunjuk ke kluster Kafka. Kemudian, Anda dapat memulai streaming peristiwa dari aplikasi Anda yang menggunakan protokol Kafka ke hub peristiwa, yang setara dengan topik Kafka.

Catatan

Event Hubs for Kafka Ecosystems mendukung Apache Kafka versi 1.0 dan yang lebih baru.

Pemetaan konseptual Apache Kafka dan Azure Event Hubs

Secara konseptual, Kafka dan Event Hubs sangat mirip. Keduanya adalah log yang dipartisi yang dibuat untuk data streaming, di mana klien mengontrol bagian mana dari log yang dipertahankan yang ingin dibacanya. Tabel berikut ini memetakan konsep antara Kafka dan Azure Event Hubs.

Konsep Kafka Konsep Azure Event Hubs
Kluster Ruang nama
Topik Hub kejadian
Partisi Partisi
Grup Konsumen Grup Konsumen
Offset Offset

Perbedaan utama antara Apache Kafka dan Azure Event Hubs

Meskipun Apache Kafka adalah perangkat lunak yang biasanya perlu Anda instal dan operasikan, Azure Event Hubs adalah layanan cloud-native yang terkelola sepenuhnya. Tidak ada server, disk, atau jaringan untuk dikelola dan dipantau dan tidak ada broker yang perlu dipertimbangkan atau dikonfigurasi. Anda membuat namespace layanan, yang merupakan titik akhir dengan nama domain yang sepenuhnya memenuhi syarat, lalu Anda membuat Pusat Aktivitas (topik) di dalam namespace layanan tersebut.

Untuk informasi selengkapnya tentang Azure Event Hubs dan namespace layanan, lihat Fitur Azure Event Hubs. Sebagai layanan cloud, Azure Event Hubs menggunakan satu alamat IP virtual yang stabil sebagai titik akhir, sehingga klien tidak perlu tahu tentang broker atau mesin dalam kluster. Meskipun Azure Event Hubs menerapkan protokol yang sama, perbedaan ini berarti bahwa semua lalu lintas Kafka untuk semua partisi dapat diprediksi dialihkan melalui titik akhir yang satu ini daripada memerlukan akses firewall untuk semua broker kluster.

Skala di Pusat Aktivitas dikendalikan oleh berapa banyak TU (unit throughput/throughput units) atau unit pemrosesan yang Anda beli. Jika Anda mengaktifkan fitur Inflasi Otomatis untuk namespace layanan tingkat standar, Pusat Aktivitas secara otomatis meningkatkan skala TU saat Anda mencapai batas throughput. Fitur ini juga berfungsi dengan dukungan protokol Apache Kafka. Untuk namespace tingkat premium, Anda dapat meningkatkan jumlah unit pemrosesan yang ditetapkan ke namespace layanan.

Apakah Apache Kafka merupakan solusi yang tepat untuk beban kerja Anda?

Berasal dari membangun aplikasi menggunakan Apache Kafka, penting juga untuk memahami bahwa Azure Event Hubs adalah bagian dari armada layanan, yang juga mencakup Azure Service Bus, dan Azure Event Grid.

Sementara beberapa penyedia distribusi komersial Apache Kafka mungkin menjelaskan bahwa Apache Kafka adalah toko serba ada untuk semua kebutuhan platform Olahpesan Anda, kenyataannya Apache Kafka tidak mengimplementasikan, misalnya, pola antrean competing-consumer, tidak memiliki dukungan untuk publish-subscribe pada tingkat yang memungkinkan pelanggan mengakses pesan masuk berdasarkan aturan yang dievaluasi oleh server selain offset biasa, dan tidak memiliki fasilitas untuk melacak siklus hidup pekerjaan yang dimulai oleh pesan atau mengesampingkan pesan yang salah ke dalam antrean dead-letter, yang semuanya merupakan dasar untuk banyak skenario Olahpesan perusahaan.

Untuk memahami perbedaan antara pola dan pola mana yang paling baik dicakup oleh layanan mana, lihat panduan Opsi perpesanan asinkron di Azure. Sebagai pengguna Apache Kafka, Anda mungkin menemukan bahwa jalur komunikasi yang telah Anda sadari sejauh ini dengan Kafka, dapat diwujudkan dengan kompleksitas dasar yang jauh lebih sedikit dan kemampuan yang lebih kuat menggunakan Azure Event Grid atau Microsoft Azure Service Bus.

Jika Anda memerlukan fitur khusus Apache Kafka yang tidak tersedia melalui antarmuka Event Hubs untuk Apache Kafka atau jika pola penerapan Anda melebihi kuota Event Hubs, Anda juga dapat menjalankan cluster Apache Kafka asli di Azure HDInsight.

Keamanan dan autentikasi

Setiap kali Anda menerbitkan atau menggunakan acara dari Azure Event Hubs untuk Kafka, klien Anda mencoba mengakses sumber Azure Event Hubs. Anda ingin memastikan bahwa sumber daya diakses menggunakan entitas yang berwenang. Saat menggunakan protokol Apache Kafka dengan klien Anda, Anda dapat mengatur konfigurasi Anda untuk autentikasi dan enkripsi menggunakan mekanisme SASL. Saat menggunakan Azure Event Hubs untuk Kafka yang memerlukan enkripsi TLS (karena semua data transit dengan Event Hubs dienkripsi oleh TLS), hal ini dapat dilakukan dengan menentukan opsi SASL_SSL dalam file konfigurasi Anda.

Azure Event Hubs menyediakan beberapa opsi untuk mengotorisasi akses ke sumber daya aman Anda.

  • OAuth 2.0
  • Tanda Tangan Akses Bersama (SAS)

OAuth 2.0

Azure Event Hubs terintegrasi dengan ID Microsoft Entra, yang menyediakan server otorisasi terpusat yang mematuhi OAuth 2.0 . Dengan MICROSOFT Entra ID, Anda dapat menggunakan kontrol akses berbasis peran Azure (Azure RBAC) untuk memberikan izin terperinci ke identitas klien Anda. Anda dapat menggunakan fitur ini dengan klien Kafka Anda dengan menentukan SASL_SSL untuk protokol dan OAUTHBEARER sebagai mekanismenya. Untuk detail tentang peran dan tingkat Azure untuk akses cakupan, lihat Mengotorisasi akses dengan ID Microsoft Entra.

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=OAUTHBEARER
sasl.jaas.config=org.apache.kafka.common.security.oauthbearer.OAuthBearerLoginModule required;
sasl.login.callback.handler.class=CustomAuthenticateCallbackHandler

Catatan

Properti konfigurasi di atas adalah untuk bahasa pemrograman Java. Untuk sampel yang menunjukkan cara menggunakan OAuth dengan Azure Event Hubs untuk Kafka menggunakan bahasa pemrograman yang berbeda, lihat sampel di GitHub.

Tanda Tangan Akses Bersama (SAS)

Pusat Aktivitas juga menyediakan Tanda Tangan Akses Bersama (SAS) untuk akses yang didelegasikan ke Azure Event Hubs untuk sumber daya Kafka. Mengotorisasi akses menggunakan mekanisme berbasis token OAuth 2.0 memberikan keamanan yang unggul dan kemudahan penggunaan melalui SAS. Peran bawaan juga dapat menghilangkan kebutuhan akan otorisasi berbasis ACL, yang harus dipertahankan dan dikelola oleh pengguna. Anda dapat menggunakan fitur ini dengan klien Kafka Anda dengan menentukanSASL_SSL untuk protokol dan PLAIN untuk mekanismenya.

bootstrap.servers=NAMESPACENAME.servicebus.windows.net:9093
security.protocol=SASL_SSL
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="{YOUR.EVENTHUBS.CONNECTION.STRING}";

Penting

Ganti {YOUR.EVENTHUBS.CONNECTION.STRING} dengan string koneksi ke ruang nama Azure Event Hubs. Untuk instruksi tentang mendapatkan string sambungan, lihat Mendapatkan string sambungan Azure Event Hubs. Berikut adalah contoh konfigurasi: sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="$ConnectionString" password="Endpoint=sb://mynamespace.servicebus.windows.net/;SharedAccessKeyName=RootManageSharedAccessKey;SharedAccessKey=XXXXXXXXXXXXXXXX";

Catatan

Saat menggunakan autentikasi SAS dengan klien Kafka, koneksi yang dibuat tidak terputus saat kunci SAS diregenerasi.

Catatan

Token tanda tangan akses bersama yang dihasilkan tidak didukung saat menggunakan titik akhir Azure Event Hubs untuk Apache Kafka.

Sampel

Untuk tutorial dengan instruksi langkah demi langkah untuk membuat pusat aktivitas dan mengaksesnya menggunakan SAS atau OAuth, lihat Mulai Cepat: Streaming data dengan Azure Event Hubs menggunakan protokol Kafka.

Fitur Azure Event Hubs lainnya

Fitur Azure Event Hubs for Apache Kafka adalah salah satu dari tiga protokol yang tersedia bersamaan di Azure Event Hubs, melengkapi HTTP dan AMQP. Anda dapat menulis dengan salah satu protokol ini dan membaca dengan yang lain, sehingga produsen Apache Kafka Anda saat ini dapat terus menerbitkan melalui Apache Kafka, tetapi pembaca Anda dapat memperoleh manfaat dari integrasi asli dengan antarmuka AMQP Azure Event Hubs, seperti Azure Stream Analytics atau Azure Functions. Sebaliknya, Anda dapat dengan mudah mengintegrasikan Azure Event Hubs ke dalam jaringan perutean AMQP sebagai titik akhir target, namun membaca data melalui integrasi Apache Kafka.

Selain itu, fitur Azure Event Hubs seperti Ambil, yang memungkinkan pengarsipan jangka panjang yang sangat hemat biaya melalui Azure Blob Storage dan Azure Data Lake Storage, dan Geo Disaster-Recovery juga berfungsi dengan Fitur Azure Event Hubs for Kafka.

Idempotensi

Azure Event Hubs for Apache Kafka mendukung produsen idempoen dan konsumen idempotensi.

Salah satu tenet inti Azure Event Hubs adalah konsep pengiriman setidaknya sekali . Pendekatan ini memastikan bahwa peristiwa akan selalu dikirim. Ini juga berarti bahwa peristiwa dapat diterima lebih dari sekali, bahkan berulang kali, oleh konsumen seperti fungsi. Untuk alasan ini, penting bagi konsumen untuk mendukung pola konsumen yang idempotik.

Perbedaan fitur dengan Apache Kafka

Tujuan dari Azure Event Hubs untuk Apache Kafka adalah untuk menyediakan akses ke kemampuan Azure Event Hubs ke aplikasi yang dikunci ke dalam API Apache Kafka dan sebaliknya harus didukung oleh kluster Apache Kafka.

Seperti yang dijelaskan di atas, armada Azure Messaging menyediakan cakupan yang kaya dan kuat untuk banyak skenario perpesanan, dan meskipun fitur berikut saat ini tidak didukung melalui dukungan Event Hubs untuk Apache Kafka API, kami tunjukkan di mana dan bagaimana kemampuan yang diinginkan tersedia.

Transaksi

Azure Service Bus memiliki dukungan transaksi kuat yang memungkinkan menerima dan menyelesaikan pesan dan sesi sambil mengirim pesan keluar yang dihasilkan dari pemrosesan pesan ke beberapa entitas target di bawah perlindungan konsistensi transaksi. Set fitur tidak hanya memungkinkan pemrosesan tepat satu kali dari setiap pesan secara berurutan, tetapi juga menghindari risiko konsumen lain yang secara tidak sengaja memproses ulang pesan yang sama seperti yang terjadi pada Apache Kafka. Azure Service Bus adalah layanan yang direkomendasikan untuk beban kerja pesan transaksional.

Kompresi

Fitur kompresi sisi klien Apache Kafka mengompresi batch pesan menjadi satu pesan di sisi produsen dan mendekompresi batch di sisi konsumen. Broker Apache Kafka memperlakukan batch sebagai pesan khusus.

Pengembang aplikasi produsen Kafka dapat mengaktifkan kompresi pesan dengan mengatur properti compression.type. Dalam pratinjau publik, satu-satunya algoritma kompresi yang didukung adalah gzip.

Compression.type = none | gzip

Fitur ini saat ini hanya didukung untuk produsen lalu lintas Apache Kafka dan lalu lintas konsumen. Konsumen AMQP dapat menggunakan lalu lintas Kafka terkompresi sebagai pesan yang didekompresi. Payload peristiwa Event Hubs apa pun adalah aliran byte dan konten dapat dikompresi dengan algoritma yang Anda pilih meskipun dalam pratinjau publik, satu-satunya opsi adalah gzip. Manfaat menggunakan kompresi Kafka adalah melalui ukuran pesan yang lebih kecil, peningkatan ukuran payload yang dapat Anda kirimkan, dan konsumsi sumber daya broker pesan yang lebih rendah.

Kafka Streams

Kafka Streams adalah pustaka klien untuk analisis streaming yang merupakan bagian dari proyek open source Apache Kafka, tetapi terpisah dari broker streaming acara Apache Kafka.

Alasan paling umum pelanggan Azure Event Hubs meminta dukungan Kafka Streams adalah karena mereka tertarik dengan produk "ksqlDB" Confluent. "ksqlDB" adalah proyek sumber bersama eksklusif yang dilisensikan sedemikian rupa sehingga tidak ada vendor yang "menawarkan perangkat lunak sebagai layanan, platform sebagai layanan, infrastruktur sebagai layanan atau layanan online serupa lainnya yang bersaing dengan produk atau layanan Confluent" diizinkan untuk menggunakan atau menawarkan dukungan "ksqlDB". Sederhananya, jika Anda menggunakan ksqlDB, Anda harus mengoperasikan Kafka sendiri atau harus menggunakan penawaran cloud Confluent. Ketentuan lisensi juga dapat memengaruhi pelanggan Azure yang menawarkan layanan untuk tujuan yang dikecualikan oleh lisensi.

Mandiri dan tanpa ksqlDB, Kafka Streams memiliki kemampuan lebih sedikit daripada banyak kerangka kerja dan layanan alternatif, yang sebagian besar memiliki antarmuka SQL streaming bawaan, dan semuanya terintegrasi dengan Azure Event Hubs saat ini:

Layanan dan kerangka kerja yang tercantum umumnya dapat memperoleh aliran peristiwa dan data referensi langsung dari beragam sumber melalui adaptor. Kafka Streams hanya dapat memperoleh data dari Apache Kafka dan oleh karena itu proyek analitik Anda dikunci ke dalam Apache Kafka. Untuk menggunakan data dari sumber lain, Anda harus terlebih dahulu mengimpor data ke Apache Kafka dengan framework Kafka Connect.

Jika Anda harus menggunakan kerangka kerja Kafka Streams di Azure, Apache Kafka di HDInsight akan memberi Anda opsi itu. Apache Kafka di HDInsight memberikan kontrol penuh atas semua aspek konfigurasi Apache Kafka, sambil sepenuhnya terintegrasi dengan berbagai aspek platform Azure, dari penempatan domain kesalahan/pembaruan hingga isolasi jaringan hingga integrasi pemantauan.

Langkah berikutnya

Artikel ini menyediakan pengenalan Azure Event Hubs untuk Kafka. Untuk mempelajari lebih lanjut, lihat Panduan pengembang Apache Kafka untuk Azure Event Hubs.

Untuk tutorial dengan instruksi langkah demi langkah untuk membuat pusat aktivitas dan mengaksesnya menggunakan SAS atau OAuth, lihat Mulai Cepat: Streaming data dengan Azure Event Hubs menggunakan protokol Kafka.

Selain itu , lihat sampel OAuth di GitHub.