Apache Kafka

Terapkan Apache Kafka menggunakan Docker Compose

Terapkan Apache Kafka menggunakan Docker Compose
Corak reka bentuk berorientasikan perkhidmatan mikro menjadikan aplikasi kita lebih diskalakan daripada sebelumnya. Pelayan API RESTful, front-end dan bahkan pangkalan data kini boleh diskalakan secara mendatar. Penskalaan mendatar adalah tindakan menambahkan nod baru ke kluster aplikasi anda untuk menyokong beban kerja tambahan. Sebaliknya, ini juga memungkinkan untuk mengurangkan penggunaan sumber daya, ketika beban kerja berkurang, untuk menjimatkan kos. Sistem berskala mendatar perlu diedarkan sistem. Sistem ini dapat bertahan daripada kegagalan beberapa VM, kontena atau pautan rangkaian dan masih kekal dalam talian dan sihat untuk pengguna akhir.

Semasa membincangkan sistem yang diedarkan seperti di atas, kami menghadapi masalah analisis dan pemantauan. Setiap nod menghasilkan banyak maklumat mengenai kesihatannya sendiri (penggunaan CPU, memori, dll) dan mengenai status aplikasi bersama dengan apa yang cuba dilakukan oleh pengguna. Perincian ini mesti dicatat dalam:

  1. Susunan yang sama di mana mereka dicipta,
  2. Terpisah dari segi urgensi (analisis masa nyata atau kumpulan data), dan yang paling penting,
  3. Mekanisme yang mana ia dikumpulkan mestilah tersebar dan boleh diskalakan, jika tidak, kita akan mengalami satu titik kegagalan. Sesuatu yang mesti dielakkan oleh reka bentuk sistem diedarkan.

Mengapa Menggunakan Kafka?

Apache Kafka disebut sebagai Platform Pengaliran Terdistribusi. Di Kafka lingo, Pengeluar menjana data secara berterusan (aliran) dan Pengguna bertanggungjawab untuk memproses, menyimpan dan menganalisisnya. Kafka Broker bertanggungjawab untuk memastikan bahawa dalam senario yang diedarkan data dapat dicapai dari Pengeluar ke Pengguna tanpa adanya ketidakkonsistenan. Satu set broker Kafka dan perisian lain yang dipanggil penjaga zoo merupakan penyebaran khas Kafka.

Aliran data dari banyak pengeluar perlu digabungkan, dipartisi dan dihantar kepada beberapa pengguna, ada banyak pengacakan yang terlibat. Mengelakkan ketidakkonsistenan bukanlah tugas yang mudah. Inilah sebabnya mengapa kita memerlukan Kafka.

Senario di mana Kafka boleh digunakan agak pelbagai. Apa sahaja dari peranti IOT hingga kumpulan VM ke pelayan logam kosong di premis anda sendiri. Di mana sahaja di mana banyak 'perkara' secara serentak menginginkan perhatian anda .. .Itu tidak begitu saintifik? Seni bina Kafka adalah lubang arnab sendiri dan layak mendapat rawatan bebas. Mari pertama-tama kita melihat penyebaran perisian di peringkat permukaan.

Menggunakan Docker Compose

Dengan cara khayalan apa pun yang anda memutuskan untuk menggunakan Kafka, satu perkara pasti - Anda tidak akan menggunakannya sebagai satu contoh. Ia tidak dimaksudkan untuk digunakan dengan cara itu, dan walaupun aplikasi yang diedarkan anda hanya memerlukan satu contoh (broker) buat masa ini, aplikasi tersebut akan terus berkembang dan anda perlu memastikan bahawa Kafka dapat mengikuti.

Docker-compose adalah rakan kongsi yang tepat untuk skalabiliti jenis ini. Sebagai gantinya untuk menjalankan broker Kafka pada VM yang berlainan, kami memanfaatkannya dan memanfaatkan Docker Compose untuk mengautomasikan penggunaan dan penskalaan secara automatik. Bekas Docker sangat berskala pada kedua host Docker tunggal dan juga di sekumpulan jika kita menggunakan Docker Swarm atau Kubernetes. Oleh itu, masuk akal untuk memanfaatkannya agar Kafka dapat ditingkatkan.

Mari mulakan dengan satu contoh broker. Buat direktori yang disebut apache-kafka dan di dalamnya buat dokumentasi anda.yml.

$ mkdir apache-kafka
$ cd apache-kafka
$ vim docker-compose.yml

Kandungan berikut akan dimasukkan ke dalam kompos anda.fail yml:

versi: '3'
perkhidmatan:
penjaga zoo:
gambar: wurstmeister / zookeeper
 
kafka:
gambar: wurstmeister / kafka
pelabuhan:
- "9092: 9092"
persekitaran:
KAFKA_ADVERTISED_HOST_NAME: localhost
KAFKA_ZOOKEEPER_CONNECT: penjaga zook: 2181

Sebaik sahaja anda menyimpan kandungan di atas dalam fail tulis anda, dari direktori yang sama jalankan:

$ docker-compose up -d

Baiklah, jadi apa yang kami buat di sini?

Memahami Docker-Compose.yml

Karang akan memulakan dua perkhidmatan seperti yang disenaraikan dalam fail yml. Mari kita lihat failnya dengan teliti. Gambar pertama adalah penjaga zook yang diperlukan oleh Kafka untuk mengawasi pelbagai broker, topologi rangkaian dan juga menyegerakkan maklumat lain. Oleh kerana kedua-dua perkhidmatan penjaga zook dan penjaga kafka akan menjadi sebahagian daripada rangkaian jambatan yang sama (ini dibuat semasa kita menjalankan penggabungan dok), kita tidak perlu mendedahkan port apa pun. Broker Kafka boleh bercakap dengan penjaga gawang dan itu semua yang diperlukan oleh penjaga zookeeper.

Perkhidmatan kedua adalah kafka sendiri dan kami hanya menjalankan satu contohnya, iaitu satu broker. Sebaik-baiknya, anda ingin menggunakan banyak broker untuk memanfaatkan seni bina Kafka yang diedarkan. Perkhidmatan ini mendengar pada port 9092 yang dipetakan ke nombor port yang sama di Docker Host dan itulah bagaimana perkhidmatan itu berkomunikasi dengan dunia luar.

Perkhidmatan kedua juga mempunyai beberapa pemboleh ubah persekitaran. Pertama, adakah KAFKA_ADVERTISED_HOST_NAME ditetapkan ke localhost. Ini adalah alamat di mana Kafka berjalan, dan di mana pengeluar dan pengguna dapat mencarinya. Sekali lagi, ini harus diatur ke localhost melainkan ke alamat IP atau nama host dengan ini pelayan dapat dihubungi di rangkaian anda. Kedua ialah nama host dan nombor port perkhidmatan penjaga zook anda. Sejak kami menamakan perkhidmatan zookeeper ... baiklah, zookeeper itulah nama host yang akan menjadi, dalam rangkaian jambatan docker yang kami sebutkan.

Menjalankan aliran mesej sederhana

Agar Kafka mula bekerja, kita perlu membuat topik di dalamnya. Pelanggan pengeluar kemudian dapat menerbitkan aliran data (pesan) ke topik tersebut dan pengguna dapat membaca aliran data tersebut, jika mereka melanggan topik tersebut.

Untuk melakukan ini, kita perlu memulakan terminal interaktif dengan bekas Kafka. Senaraikan bekas untuk mengambil nama bekas kafka. Sebagai contoh, dalam kes ini bekas kami diberi nama apache-kafka_kafka_1

$ dok dok

Dengan nama bekas kafka, kita sekarang boleh masuk ke dalam bekas ini.

$ docker exec -it apache-kafka_kafka_1 bash
bash-4.4 #

Buka dua terminal yang berbeza untuk menggunakan satu sebagai pengguna dan pengeluar lain.

Bahagian Pengeluar

Dalam salah satu arahan (yang anda pilih untuk menjadi pengeluar), masukkan arahan berikut:

## Untuk membuat topik baru bernama ujian
bash-4.4 # topik kafka.sh --create --zookeeper zookeeper: 2181 --faktor replikasi 1
--partition 1 - ujian topik
 
## Untuk memulakan pengeluar yang menerbitkan aliran data dari input standard ke kafka
bash-4.4 # pengeluar konsol kafka.sh - broker tempatan senarai tempatan: 9092 - ujian topik
>

Pengeluar kini bersedia untuk mengambil input dari papan kekunci dan menerbitkannya.

Bahagian Pengguna

Pindah ke terminal kedua yang disambungkan ke bekas kafka anda. Perintah berikut memulakan pengguna yang memakan topik ujian:

$ kafka-konsol-pengguna.sh --boststrap-server localhost: 9092 - ujian topik

Kembali ke Pengeluar

Anda kini boleh menaip mesej pada prompt baru dan setiap kali anda mengembalikan baris baru dicetak pada permintaan pengguna. Sebagai contoh:

> Ini adalah mesej.

Mesej ini dihantar ke pengguna, melalui Kafka, dan anda dapat melihatnya dicetak pada permintaan pengguna.

Persediaan Dunia Sebenar

Anda kini mempunyai gambaran kasar bagaimana penyediaan Kafka berfungsi. Untuk kes penggunaan anda sendiri, anda perlu menetapkan nama host yang bukan localhost, anda memerlukan banyak broker seperti itu untuk menjadi sebahagian daripada kafka kluster anda dan akhirnya anda perlu menubuhkan pelanggan pengguna dan pengeluar.

Berikut adalah beberapa pautan berguna:

  1. Pelanggan Python Confluent
  2. Dokumentasi Rasmi
  3. Senarai demo yang berguna

Saya harap anda bersenang-senang meneroka Apache Kafka.

Cara membalikkan arah tatal Tetikus dan Pad Sentuh pada Windows 10
Tetikus dan Pad sentuhs bukan sahaja menjadikan pengkomputeran mudah, tetapi lebih cekap dan kurang memakan masa. Kami tidak dapat membayangkan kehidu...
Cara menukar saiz, warna & skema penunjuk dan kursor tetikus pada Windows 10
Penunjuk dan kursor tetikus di Windows 10 adalah aspek yang sangat penting dalam sistem operasi. Ini boleh dikatakan untuk sistem operasi lain juga, j...
Enjin Permainan Sumber Percuma dan Terbuka untuk Membangunkan Permainan Linux
Artikel ini akan merangkumi senarai enjin permainan sumber percuma dan terbuka yang dapat digunakan untuk mengembangkan permainan 2D dan 3D di Linux. ...