تكوين عناقيد ثلاث عقدة ZooKeeper وسماسرة Apache Kafka

يوم جيد!

في هذه المقالة ، سننظر في إنشاء مجموعة من ثلاث عقد ZooKeeper (خدمة تنسيق النظام الموزع) ، اثنان منها وسطاء رسائل كافكا ، والثالث هو المدير.

ونتيجة لذلك ، سيتم تنفيذ مخطط المكونات التالي:

صورة

جميع المكونات على جهاز واحد ، من أجل البساطة ، سوف نستخدم ناشر وحدة التحكم (المنتج) ورسائل المشترك (المستهلك) المدمجة.

تم بناء وحدة ZooKeeper في حزمة Kafka ، نستخدمها.

التثبيت والإعداد


تثبيت حزمة Kafka

في هذه الحالة ، يكون نظام التشغيل Ubuntu 16.04 LTS.

توجد الإصدارات الحالية والتعليمات التفصيلية على الموقع الرسمي .

wget http://mirror.linux-ia64.org/apache/kafka/2.4.1/kafka_2.12-2.4.1.tgz
tar -xvzf kafka_2.12-2.4.1.tgz 

إنشاء أدلة عمل للعقد الثلاث server_1 و server_2 و server_3.

mv kafka_2.12-2.4.1 kafka_server_1
cp -r kafka_server_1/ kafka_server_2/
cp -r kafka_server_1/ kafka_server_3/

تكوين العقد

تكوين وسيط كافكا
(من الدلائل kafka_server_1 و kafka_server_2 و kafka_server_3 ، على التوالي)

vim config/server.properties

  • معرف الوسيط (0 ، 1 ، 2 على التوالي)
  • منفذ العميل (9092 ، 9093 ، 9094)
  • منفذ ZooKeeper (2181 ، 2182 ، 2183)
  • دليل السجل (/ tmp / kafka-logs-1، / tmp / kafka-logs-2، / tmp / kafka-logs-3)

broker.id=0
listeners=PLAINTEXT://:9092
zookeeper.connect=localhost:2181   
log.dirs=/tmp/kafka-logs-1

تكوين Znode:

vim config/zookeeper.properties

  • دليل للبيانات (/ tmp / zookeeper_1 و / tmp / zookeeper_2 و / tmp / zookeeper_3)
  • منفذ العميل (2181 ، 2182 ، 2183)
  • الحد الأقصى لعدد اتصالات العميل وحدود الاتصال
  • منافذ لتبادل البيانات بين العقد (أي نبلغ كل عقدة عن وجود أخرى)

dataDir=/tmp/zookeeper_1
clientPort=2181
maxClientCnxns=60
initLimit=10
syncLimit=5
tickTime=2000
server.1=localhost:2888:3888
server.2=localhost:2889:3889
server.3=localhost:2890:3890

إنشاء أدلة لعقد ZooKeeper ، وكتابة معرف العقدة لملفات الخدمة:

mkdir -p /tmp/zookeeper_[1..3]
echo "1" >> /tmp/zookeeper_1/myid
echo "2" >> /tmp/zookeeper_2/myid
echo "3" >> /tmp/zookeeper_3/myid

في حالة وجود مشاكل في حقوق الوصول ، قم بتغييرها في الدلائل والملفات:

sudo chmod 777 /tmp/zookeeper_1

تشغيل العقد- z والوسطاء


بالنسبة للعقدتين الأوليين (kafka_server_1 / ، kafka_server_2 /) ، قم بتشغيل البرامج النصية لخوادم ZooKeeper و Kafka ، فالوسيطات هي ملفات التكوين المقابلة:

sudo bin/zookeeper-server-start.sh config/zookeeper.properties
sudo bin/kafka-server-start.sh config/server.properties

للعقدة الثالثة (kafka_server_3 /) - فقط ZooKeeper.

البرامج النصية لإيقاف الخوادم:

sudo bin/kafka-server-stop.sh
sudo bin/zookeeper-server-stop.sh

إنشاء سمة ومنتج وحدة التحكم والمستهلك


الموضوع (الموضوع) - تدفق رسائل من نوع معين ، مقسمة إلى أقسام (يتم تحديد الكمية بواسطة مفتاح - القسم). يتم تكرار كل قسم على خادمين (عامل التكرار). بعد المفتاح --bootstrap-server ، حدد منافذ وسطاء Kafka مفصولين بفواصل. يحدد مفتاح --topic اسم الموضوع.

sudo bin/kafka-topics.sh --create --bootstrap-server localhost:9092,localhost:9093 --replication-factor 2 --partitions 2 --topic TestTopic

لمعرفة قائمة المواضيع على المنفذ ، يمكن إجراء معلومات حول كل موضوع باستخدام الأمر:

sudo bin/kafka-topics.sh --list --zookeeper localhost:2181           
sudo bin/kafka-topics.sh --zookeeper localhost:2181 --describe --topic TestTopic

Leader - خادم مزود بالمثيل الرئيسي للقسم ، نسخة طبق الأصل - الخادم الذي يتم تكرار المعلومات عليه ، ISR - الخوادم التي تأخذ دور القادة في حالة فشل الزعيم.

نقوم بإنشاء منتج وحدة التحكم ، مستهلك وحدة التحكم باستخدام البرامج النصية المناسبة:

sudo bin/kafka-console-producer.sh --broker-list localhost:9092,localhost:9093 --topic TestTopic
sudo bin/kafka-console-consumer.sh --bootstrap-server localhost:9092,localhost:9093 --from-beginning --topic TestTopic

وهذا يضمن الإرسال المستمر للرسائل إلى المستلم ، في حالة فشل وسيط رسائل واحد يعالج الثاني.

خدمات zookeeper و kafka في systemctl


لتسهيل بدء تشغيل مجموعة ، يمكنك إنشاء خدمات في systemctl: zookeeper_1.service ، zookeeper_2.service ، zookeeper_3.service ، kafka_1.service ، kafka_2.service.

نقوم بتحرير الملف /etc/systemd/system/zookeeper_1.service (قم بتغيير الدليل / المنزل / المستخدم ومستخدم المستخدم إلى الملفات الضرورية).

[Unit]
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
User=user
ExecStart=home/user/kafka_server_1/bin/zookeeper-server-start.sh /home/user/kafka_server_1/config/zookeeper.properties
ExecStop=/home/user/kafka_server_1/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

بالنسبة للخدمات zookeeper_2.service و zookeeper_3.service فهي متشابهة.

ملف /etc/systemd/system/kafka_1.service:
[Unit]
Requires=zookeeper.service
After=zookeeper.service

[Service]
Type=simple
User=user
ExecStart=/bin/sh -c '/home/user/kafka_server_1/bin/kafka-server-start.sh /home/user/kafka_server_1/config/server.properties > /tmp/kafka-logs-1 2>&1'
ExecStop=/home/user/kafka_server_1/bin/kafka-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target

kafka_2.service مشابه.

تفعيل الخدمات والتحقق منها

systemctl daemon-reload
systemctl enable zookeeper_1.service #  
systemctl start zookeeper_1.service
sudo journalctl -u zookeeper_1.service #   
systemctl stop zookeeper_1.service

وينطبق الشيء نفسه على zookeeper_2.service و zookeeper_3.service و kafka_1.service و kafka_1.service.

شكرا للانتباه!

All Articles