Flazzo memiliki fokus utama untuk menambah nilai bisnis Anda.

Blog

Apa alamat Kafka yang diumumkan?

16771981-thumb.jpg
Blog

Apa alamat Kafka yang diumumkan?


Mari kita mulai dengan dasar-dasarnya. Setelah berhasil memulai klaster Redpanda atau Apache Kafka®, Anda ingin segera mengalirkan data ke klaster tersebut. Terlepas dari alat dan bahasa yang Anda pilih, Anda akan segera dimintai daftar server bootstrap untuk disambungkan ke klien Anda.

Server bootstrap ini hanya untuk klien Anda untuk memulai koneksi ke salah satu broker di cluster, dan kemudian akan memberi klien Anda set metadata awal. Metadata memberi tahu klien broker mana yang saat ini tersedia dan pemimpin mana dari setiap partisi yang dihosting oleh broker mana sehingga klien dapat memulai koneksi langsung ke semua broker secara individual. Diagram di bawah ini akan memberi Anda ide yang lebih baik.

metadata

Klien menentukan di mana untuk mendistribusikan data berdasarkan informasi yang diberikan. Bergantung pada jumlah shard dan tempat shard dihosting, pelanggan Anda akan mendorong atau menarik shard ke/dari pialang host mereka.

Alamat Kafka dan alamat Kafka yang diiklankan diperlukan. Alamat Kafka digunakan oleh broker Kafka untuk menemukan diri mereka sendiri, dan alamat yang diiklankan untuk klien untuk menemukannya.

Dalam artikel ini, kami akan membantu Anda memahami alamat Kafka yang diiklankan, cara menggunakannya di Docker dan Kubernetes (K8s), dan cara men-debugnya.

Kapan Menggunakan Alamat Kafka dan Alamat Kafka yang Diiklankan

Saat memulai klaster Redpanda Anda, alamat Kafka digunakan untuk mengikat layanan Redpanda ke host-nya dan menggunakan titik akhir yang ditetapkan untuk mulai menerima permintaan.

{LISTENER_NAME}://{HOST_NAME}:{PORT}

Pialang menggunakan alamat Kafka yang diiklankan di metadata, sehingga klien Anda akan menggunakan alamat tersebut untuk menemukan pialang lain.

Pialang menggunakan alamat Kafka yang diiklankan di metadata, sehingga klien Anda akan menggunakan alamat tersebut untuk menemukan pialang lain.

Untuk menyetelnya, gunakan –kafka-addr dan –advertise-kafka-addr dengan RPK atau kafka_api atau advertising_kafka_api di /etc/redpanda/red panda.yaml untuk setiap broker.

Sejauh ini, semuanya tampak sederhana. Dan, Anda mungkin mulai bertanya-tanya apakah alamat Kafka dan alamat Kafka yang diiklankan benar-benar mubazir. Ini mulai menjadi rumit ketika klien Anda tidak memiliki visibilitas ke host cluster, dan jika Anda meneruskan alamat internal yang sama ke klien, mereka tidak akan dapat menyelesaikannya. Jadi kita perlu memodifikasi alamat Kafka yang diiklankan untuk memungkinkan klien Kafka memahami dan dapat diakses dari luar (yaitu alamat IP eksternal).

ubah alamat Kafka yang diiklankan

Cara menggunakan alamat Kafka dan alamat Kafka yang diiklankan di Docker (kontainer)

Masalah lain yang sering muncul adalah saat menjalankan redpanda broker Buruh pelabuhan (wadah). Hal yang sama berlaku untuk topologi jaringan lain yang lebih kompleks. Tapi jangan khawatir, Anda sudah tahu mekanismenya. Yang harus Anda lakukan adalah memasukkan alamat yang benar untuk pelanggan yang tinggal di lokasi berbeda.

Saat menjalankan wadah Docker, ia membuat jaringan defaultnya sendiri, tetapi jika beberapa di antaranya perlu berkomunikasi, Anda harus mengonfigurasi jaringan (terkadang bahkan beberapa lapisan jaringan) yang menghubungkannya. Kami tahu alamat Kafka digunakan untuk mengikat ke host, kami hanya akan menggunakan 0.0.0.0 karena akan mengikat semua antarmuka di host dan port apa pun yang Anda pilih (jangan gunakan port yang sudah sibuk).

Contohnya bisa 0.0.0.0:9092 dan 0.0.0.0:9095 untuk setiap broker yang berjalan di wadah buruh pelabuhan, Anda akan mendaftarkan nama di jaringan, jika klien Anda mencoba mengakses broker di dalam jaringan, apa pun yang perlu Anda lakukan mengatur alamat Kafka yang diiklankan ke nama host yang terdaftar di jaringan. Misalnya, jika penampung Redpanda pertama Anda mendaftarkan namanya sebagai Gedung-A, Anda dapat menyetel alamat Kafka yang diiklankan ke Gedung-A:9092.Alamat Kafka di Gedung-A:9092

Untuk pelanggan di luar jaringan Docker, di mana mereka tidak memiliki akses ke tabel perutean jaringan, alamat Kafka yang diiklankan harus disetel ke host yang menjalankan kontainer Docker, sehingga pelanggan dapat menemukannya. Dan jangan lupa bahwa Anda juga perlu membuka porta dan mengaitkannya dengan host.

buruh pelabuhan

Tetapi bagaimana jika Anda memiliki klien yang keduanya ingin mengakses cluster secara bersamaan? Sederhana, tambahkan banyak pendengar! Setiap pendengar akan mengembalikan satu set alamat Kafka yang diiklankan untuk klien di lingkungan yang berbeda.

Alamat Kafka diumumkan

Berikut adalah diagram untuk Anda.

Alamat Kafka untuk klien di lingkungan yang berbeda

Penggunaan alamat Kafka dan alamat Kafka yang diiklankan di K8s

Dari Kubernetes adalah platform yang mengatur kontainer, konsepnya sangat mirip dengan menjalankan kontainer Docker, tetapi dalam skala yang lebih besar. Dalam kluster Redpanda biasa, Anda akan ingin memasang satu broker Redpanda di node pekerja individual.

Semua pod yang berjalan di K8 akan diberi alamat internal, yang hanya dapat dilihat di lingkungan Kubernetes, jika klien berjalan di luar Kubernetes, diperlukan cara untuk menemukan broker. Jadi Anda dapat menggunakan NodePort untuk mengekspos port dan menggunakan IP publik dari node pekerja hosting.

Pelabuhan Node

Untuk alamat Kafka seperti biasa, ikat saja ke container lokal. Misalnya, 0.0.0.0:9092 Dan 0.0.0.0:9095. Mengenai alamat Kafka yang diiklankan, kita perlu menentukan dua pendengar: satu untuk koneksi internal dan satu lagi untuk eksternal.

Untuk pelanggan internal, kita cukup menggunakan nama layanan internal yang dihasilkan, misalnya jika nama layanan Anda disetel ke Gedung-A, alamat Kafka yang diiklankan akan menjadi internal://Building-A:9092.Untuk pendengar eksternal, gunakan alamat IP publik (atau nama domain) dari node pekerja hosting dengan port terbuka di NodePort, tempat Anda akan diberikan port baru. Misalnya, jika node pekerja pertama Anda memiliki alamat IP publik (domain) sebagai XXX-Blvd dan port yang baru ditetapkan adalah 39092, Anda dapat menyetel alamat Kafka yang diiklankan ke external://XXX-Blvd:39092 .

Cara men-debug alamat Kafka yang diiklankan

Saat Anda dapat terhubung ke klaster Anda dengan Redpanda Keep (Rpk) dan klien Anda melontarkan kesalahan seperti “ENOTFOUND”. Periksa apakah advertised_kafka_api didefinisikan dengan benar, dengan alamat yang dapat diselesaikan oleh klien Anda.

> curl localhost:9644/v1/node_config

{"advertised_kafka_api":[{"name":"internal","address":"0.0.0.0","port":9092},{"name":"external","address":"192.186.0.3","port":19092}]....}

Jika Anda menjalankan Buruh pelabuhancari tahu port 9644 mana yang diekspos dari Docker.

> docker port redpanda-0

8081/tcp -> 0.0.0.0:18081
9644/tcp -> 0.0.0.0:19644
18082/tcp -> 0.0.0.0:18082
19092/tcp -> 0.0.0.0:19092

Dan keriting.

> curl localhost:19644/v1/node_config

{"advertised_kafka_api":[{"name":"internal","address":"redpanda-0","port":9092},{"name":"external","address":"localhost","port":19092}]....}

Jika Anda menjalankan Kubernetescari tahu port admin mana yang terbuka.

> kubectl get svc redpanda-external -n redpanda 

NAME                TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)
redpanda-external   NodePort   10.100.87.34   <none>        9644:31644/TCP,9094:31092/TCP,8083:30082/TCP,8084:30081/TCP   3h53m

> kubectl get pod -o=custom-columns=NAME:.metadata.name,STATUS:.status.phase,NODE:.spec.nodeName -n redpanda

NAME                    NODE
redpanda-0              ip-1-168-57-208.xx.compute.internal
redpanda-1              ip-1-168-1-231.xx.compute.internal
redpanda-2              ip-1-168-83-90.xx.compute.internal

>kubectl get nodes -o=custom-columns="NAME:.metadata.name,IP:.status.addresses[?(@.type=="ExternalIP")].address"

NAME                               IP
ip-1.us-east-2.compute.internal    3.12.84.230
ip-1.us-east-2.compute.internal    3.144.255.61
ip-1.us-east-2.compute.internal    3.144.144.138

Dan keriting.

> curl 3.12.84.230:31644/v1/node_config

{"advertised_kafka_api":[{"name":"internal","address":"redpanda-1.redpanda.redpanda.svc.cluster.local.","port":9093},{"name":"default","address":"3.12.84.230","port":31092}].....}

Terakhir, periksa apakah Anda terhubung ke pendengar (port) yang benar. Dan Anda selesai!

pendengar yang benar (port)

Kesimpulan

Jika Anda sudah sampai sejauh ini, Anda seharusnya sekarang memiliki pemahaman yang lebih baik tentang alamat Kafka yang diiklankan dan bagaimana Anda dapat menggunakannya di Docker dan K8s.

Untuk mempelajari lebih lanjut tentang Redpanda, lihat dokumentasi kami dan menjelajahinya blog panda merah untuk tutorial dan panduan cara mengintegrasikan Redpanda dengan mudah. Untuk pendekatan yang lebih praktis, ambil Redpanda Edisi Komunitas gratis untuk test drive!