مقدمة
يدعم Apache Kafka بروتوكولات أمان متنوعة وسير عمل مصادقة لضمان اتصال الأفراد والتطبيقات المصرح لهم فقط بالمجموعة. في التكوين الافتراضي، يسمح Kafka للجميع بالوصول، ولكن لا يتم تفعيل أي فحوصات أمنية. على الرغم من فائدته في الاستكشاف والتطوير، يجب تأمين عمليات النشر في بيئة الإنتاج بشكل صحيح قبل عرضها على العالم الخارجي. كما يجب مراقبة هذه البيئات لضمان سلاسة التشغيل ومنع الأعطال المحتملة.
في هذا البرنامج التعليمي، ستعزز تثبيت Kafka لديك من خلال تكوين تشفير حركة مرور TLS ومصادقة SASL لتوفير تدفق تسجيل دخول قياسي باستخدام اسم المستخدم وكلمة المرور. ستتعلم كيفية تكوين نصوص المُنتِج والمستهلك المُقدمة للاتصال بمجموعة بيانات آمنة. بعد ذلك، ستتعلم كيفية تصدير مقاييس Kafka وعرضها في Grafana. ستتعلم أيضًا كيفية الوصول إلى عُقد ومواضيع المجموعة من خلال واجهة ويب سهلة الاستخدام مقدمة من AKHQ.
المتطلبات الأساسية
- جهاز مزود بذاكرة وصول عشوائي (RAM) بسعة 4 غيغابايت على الأقل ومعالجين. بالنسبة لخادم أوبونتو، اتبع خطوات الإعداد الأولية للخادم للحصول على تعليمات الإعداد.
- تم تثبيت Apache Kafka وتهيئته على Droplet. للاطلاع على تعليمات الإعداد، اتبع دليل البدء باستخدام Kafka. ما عليك سوى إكمال الخطوتين 1 و2.
- افهم كيفية إدارة جافا للمفاتيح والشهادات. لمزيد من المعلومات، راجع البرنامج التعليمي "أساسيات أداة جافا الرئيسية: العمل مع مخازن مفاتيح جافا".
- تم تثبيت Grafana على خادمك أو جهازك المحلي. يُرجى مراجعة البرنامج التعليمي حول كيفية تثبيت Grafana وتأمينه على أوبونتو للاطلاع على التعليمات. ما عليك سوى إكمال الخطوات الأربع الأولى.
- يشير اسم النطاق المُسجَّل بالكامل إلى خادمك. يستخدم هذا البرنامج التعليمي your_domain بالكامل ويشير إلى اسم النطاق نفسه الذي تطلبه Grafana. يمكنك شراء اسم نطاق من Namecheap، أو الحصول عليه مجانًا من Freenom، أو استخدام مُسجِّل نطاقات من اختيارك.
الخطوة 1 - تكوين بروتوكولات أمان Kafka
في تكوينه الأساسي، يسمح كافكا لأي شخص بالاتصال به دون التحقق من مصدر الطلب. هذا يعني أن مجموعتك متاحة للجميع افتراضيًا. مع أن هذا مفيد للاختبار، إذ يُخفف عبء الصيانة على الأجهزة المحلية والتثبيتات الخاصة، إلا أنه يجب تفعيل ميزات الأمان في تثبيتات كافكا الإنتاجية والعامة لمنع الوصول غير المصرح به.
في هذه الخطوة، ستقوم بتكوين وسيط Kafka الخاص بك لاستخدام تشفير TLS لحركة المرور بين الوسيط والمستخدمين. ستقوم أيضًا بإعداد SASL كإطار مصادقة للمصادقة عند الاتصال بمجموعة الشبكات.
إنشاء شهادات TLS وتخزينها
لإنشاء الشهادات والمفاتيح اللازمة لإعداد TLS، ستستخدم البرنامج النصي المتوفر في مستودع أدوات أمان منصة Confluent. أولًا، انسخه إلى دليلك الرئيسي بتشغيل الأمر التالي:
git clone https://github.com/confluentinc/confluent-platform-security-tools.git ~/kafka-sslاذهب إليه:
cd ~/kafka-sslيُسمى البرنامج النصي الذي تستخدمه kafka-generate-ssl-automatic.sh، ويطلب منك إدخال بلدك، وولايتك، ومنظمتك، ومدينتك كمتغيرات بيئية. تُستخدم هذه المعلمات لإنشاء الشهادات، ولكن محتواها غير مهم. ستحتاج أيضًا إلى إدخال كلمة مرور، تُستخدم لتأمين أمان Java ومخزن المفاتيح الذي تم إنشاؤه.
لتعيين متغيرات البيئة المطلوبة، قم بتشغيل الأوامر التالية، واستبدال your_tls_password بالقيمة المطلوبة:
export COUNTRY=US
export STATE=NY
export ORGANIZATION_UNIT=SE
export CITY=New York
export PASSWORD=your_tls_passwordلاحظ أن كلمة المرور يجب أن تتكون من ستة أحرف على الأقل.
قم بإعطاء البرنامج النصي أذونات قابلة للتنفيذ عن طريق تشغيل الأمر التالي:
chmod +x kafka-generate-ssl-automatic.shثم قم بتشغيله لإنشاء الملفات المطلوبة:
./kafka-generate-ssl-automatic.shسيكون هناك الكثير من النتائج. بعد الانتهاء، اذكر الملفات في الدليل:
ls -lيجب أن يبدو الناتج مثل هذا:
Outputrw-rw-r-- 1 kafka kafka 964 May 13 09:33 README.md
-rw-rw-r-- 1 kafka kafka 1063 May 13 09:34 cert-file
-rw-rw-r-- 1 kafka kafka 1159 May 13 09:34 cert-signed
-rwxrw-r-- 1 kafka kafka 6016 May 13 09:33 kafka-generate-ssl-automatic.sh
-rwxrwxr-x 1 kafka kafka 7382 May 13 09:33 kafka-generate-ssl.sh
drwxrwxr-x 2 kafka kafka 4096 May 13 09:34 keystore
-rw-rw-r-- 1 kafka kafka 184929 May 13 09:33 single-trust-store-diagram.pages
-rw-rw-r-- 1 kafka kafka 36980 May 13 09:33 single-trust-store-diagram.pdf
drwxrwxr-x 2 kafka kafka 4096 May 13 09:34 truststoreستلاحظ أن الشهادة والثقة ومخزن المفاتيح تم إنشاؤها بنجاح.
تكوين Kafka لـ TLS و SASL
الآن بعد أن أصبحت لديك الملفات اللازمة لتمكين تشفير TLS، ستقوم بتكوين Kafka لاستخدامها ومصادقة المستخدمين باستخدام SASL.
ستُعدِّل ملف server.properties في قسم config/kraft بمجلد التثبيت. ثبّته ضمن Kafka في مجلدك الرئيسي كجزء من المتطلبات الأساسية. للوصول إليه، شغّل الأمر التالي:
cd ~/kafkaافتح ملف التكوين الرئيسي للتحرير:
nano config/kraft/server.properties
ابحث عن الأسطر التالية:
...
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
# Name of listener used for communication between brokers.
inter.broker.listener.name=PLAINTEXT
# Listener name, hostname and port the broker will advertise to clients.
# If not set, it uses the value for "listeners".
advertised.listeners=PLAINTEXT://localhost:9092قم بتغييرها إلى ما يلي، واستبدال PLAINTEXT بـ BROKER:
...
listeners=BROKER://:9092,CONTROLLER://:9093
# Name of listener used for communication between brokers.
inter.broker.listener.name=BROKER
# Listener name, hostname and port the broker will advertise to clients.
# If not set, it uses the value for "listeners".
advertised.listeners=BROKER://localhost:9092ثم ابحث عن السطر listener.security.protocol.map:
# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSLقم بتعيين BROKER إلى SASL_SSL عن طريق تضمين التعريف بالقيمة:
# Maps listener names to security protocols, the default is for them to be the same. See the config documentation for more details
listener.security.protocol.map=BROKER:SASL_SSL,CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSLهنا، قمت بإضافة تعريف الاسم المستعار BROKER الذي استخدمته في المستمعين وقمت بربطه بـ SASL_SSL، مما يشير إلى أنه يجب استخدام كل من SSL (الاسم السابق لـ TLS) وSASL.
ثم انتقل إلى نهاية الملف وأضف الأسطر التالية:
ssl.truststore.location=/home/kafka/kafka-ssl/truststore/kafka.truststore.jks
ssl.truststore.password=your_tls_password
ssl.keystore.location=/home/kafka/kafka-ssl/keystore/kafka.keystore.jks
ssl.keystore.password=your_tls_password
ssl.key.password=your_tls_password
ssl.client.auth=required
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.controller.protocol=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=org.apache.kafka.metadata.authorizer.StandardAuthorizer
allow.everyone.if.no.acl.found=false
super.users=User:adminأولاً، تُحدد مواقع وكلمات مرور مخازن الثقة والمفاتيح التي أنشأتها. تُعيّن معلمة ssl.client.auth إلى "مطلوب"، مما يُلزم كافكا برفض أي اتصالات لا تُقدّم شهادة TLS صالحة. بعد ذلك، تُعيّن آلية SASL إلى "عادي"، مما يُفعّلها. يختلف "عادي" عن "نص عادي" في أنه يتطلب استخدام اتصال مُشفّر، ويعتمد كلاهما على اسم مستخدم وكلمة مرور.
أخيرًا، عيّنت StandardAuthorizer كفئة مُصرِّح، والتي تتحقق من بيانات الاعتماد في ملف التكوين الذي ستُنشئه قريبًا. بعد ذلك، عيّنت مُعامل allow.everyone.if.no.acl.found إلى false، مما يُقيّد الوصول للاتصالات التي تستخدم بيانات اعتماد غير مناسبة. حدّدت أيضًا مستخدم الإدارة كمستخدم فائق، إذ يجب أن يكون هناك مستخدم واحد على الأقل لأداء المهام الإدارية على المجموعة.
لا تنس استبدال your_tls_password بكلمة المرور التي أدخلتها في البرنامج النصي في القسم السابق، ثم احفظ الملف وأغلقه.
بعد تهيئة Kafka، عليك إنشاء ملف يُحدد بيانات الاعتماد المسموح بها للاتصال. يدعم Kafka خدمة Java Authentication and Authorization Service (JAAS)، وهي إطار عمل لتنفيذ عمليات سير عمل المصادقة، ويقبل تعريفات بيانات الاعتماد بتنسيق JAAS.
ستُخزَّن في ملف يُسمى kafka-server-jaas.conf في config/kraft. أنشئه وافتحه للتعديل بتنفيذ الأمر التالي:
nano config/kraft/kafka-server-jaas.confأضف الأسطر التالية:
KafkaServer {
org.apache.kafka.common.security.plain.PlainLoginModule required
username="admin"
password="admin"
user_admin="admin";
};يُحدد اسم المستخدم وكلمة المرور بيانات الاعتماد الأساسية المُستخدمة للتواصل بين الوسطاء في المجموعة عند وجود عُقد متعددة. يُعرّف سطر user_admin مستخدمًا باسم مستخدم admin وكلمة مرور admin، ويُمكنه الاتصال بالوسيط من الخارج. عند الانتهاء، احفظ الملف وأغلقه.
يجب أن يكون كافكا على دراية بملف kafka-server-jaas.conf لأنه يُكمل التكوين الرئيسي. عليك تعديل تكوين خدمة kafka systemd وتمرير مرجع إليها. نفّذ الأمر التالي لفتح الخدمة للتحرير:
sudo systemctl edit --full kafkaباستخدام الأمر –full، ستتمكن من الوصول إلى محتوى الخدمة بالكامل. ابحث عن سطر ExecStart:
...
User=kafka
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/kraft/server.properties > /home/kafka/kafka/kafka.log 2>&1'
...أضف السطر التالي فوقه بحيث يبدو بهذا الشكل:
...
User=kafka
Environment="KAFKA_OPTS=-Djava.security.auth.login.config=/home/kafka/kafka/config/kraft/kafka-server-jaas.conf"
ExecStart=/bin/sh -c '/home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/kraft/server.properties > /home/kafka/kafka/kafka.log 2>&1'
...سيؤدي هذا إلى تعيين معلمة java.security.auth.login.config في ملف التكوين إلى مسار ملف تكوين JAAS، مما يفصله عن ملف تكوين Kafka الرئيسي. عند الانتهاء، احفظ الملف وأغلقه. أعد تحميل تعريف الخدمة بتشغيل الأمر التالي:
sudo systemctl daemon-reloadثم أعد تشغيل Kafka:
sudo systemctl restart kafkaلقد قمت الآن بتكوين تشفير TLS ومصادقة SASL لتثبيت Kafka الخاص بك، وستتعلم الآن كيفية الاتصال به باستخدام نصوص وحدة التحكم المقدمة.
الخطوة 2 - الاتصال بمجموعة آمنة
في هذه الخطوة، ستتعلم كيفية الاتصال بمجموعة Kafka آمنة باستخدام ملفات تكوين JAAS مع نصوص وحدة التحكم المقدمة.
تستخدم البرامج النصية المقدمة لمعالجة موضوعات إنتاج الرسائل واستهلاكها أيضًا Java داخليًا وبالتالي تقبل تكوين JAAS الذي يصف مواقع مخزن الثقة والمفتاح بالإضافة إلى مصادقة SASL.
ستحفظ هذا التكوين في ملف باسم client-jaas.conf في مجلدك الرئيسي. أنشئه وافتحه للتعديل:
nano ~/client-jaas.confأضف الأسطر التالية:
security.protocol=SASL_SSL ssl.truststore.location=/home/kafka/kafka-ssl/truststore/kafka.truststore.jks ssl.truststore.password=your_tls_password ssl.keystore.location=/home/kafka/kafka-ssl/keystore/kafka.keystore.jks ssl.keystore.password=your_tls_password sasl.mechanism=PLAIN sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin"; ssl.endpoint.identification.algorithm=
كما في السابق، عيّن البروتوكول إلى SASL_SSL، ووفّر المسارات وكلمات المرور لمخازن المفاتيح ومخازن الثقة التي أنشأتها. بعد ذلك، عيّن آلية SASL إلى PLAIN، ووفّر بيانات اعتماد مسؤول النظام. امسح مُعامل ssl.endpoint.identification.algorithm بشكل صريح لتجنب مشاكل الاتصال، حيث تُعيّن البرامج النصية الأولية اسم مضيف الجهاز الذي تعمل عليه كنقطة نهاية للشهادة، وهو ما قد لا يكون صحيحًا.
استبدل your_tls_password بالقيمة المناسبة، ثم احفظ الملف وأغلقه.
لتمرير هذا الملف إلى البرامج النصية، يمكنك استخدام المعلمة --command-config. أنشئ موضوعًا جديدًا في المجموعة باستخدام الأمر التالي:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic new_topic --command-config ~/client-jaas.confينبغي أن يتم تنفيذ الأمر بنجاح:
Output...
Created topic new_topic.للتحقق من أنه تم إنشاؤه، قم بإدراج جميع الخيوط في المجموعة عن طريق تشغيل:
bin/kafka-topics.sh --bootstrap-server localhost:9092 --list --command-config ~/client-jaas.confسيظهر الإخراج أن new_topic موجود:
Output__consumer_offsets
new_topic
...في هذا القسم، قمتَ بتكوين تثبيت Kafka لاستخدام تشفير TLS لحركة المرور وSASL للمصادقة باستخدام اسم المستخدم وكلمة المرور. ستتعلم الآن كيفية تصدير مقاييس Kafka المختلفة عبر JMX باستخدام Prometheus.
الخطوة 3 - مراقبة مقاييس Kafka JMX باستخدام Prometheus
في هذا القسم، ستستخدم بروميثيوس لجمع مقاييس كافكا والاستعلام عنها في غرافانا. يتطلب هذا إعداد مُصدِّر JMX لكافكا وربطه ببروميثيوس.
ملحقات إدارة جافا (JMX) هي إطار عمل لتطبيقات جافا، تُمكّن المطورين من جمع مقاييس عامة ومخصصة حول أداء التطبيق أثناء التشغيل بتنسيق قياسي. ولأن كافكا مكتوب بلغة جافا، فهو يدعم بروتوكول JMX ويعرض مقاييسه المخصصة من خلاله، مثل حالة المواضيع والوسطاء.تكوين كافكا وبروميثيوس
قبل المتابعة، عليك تثبيت بروميثيوس. على أجهزة أوبونتو، يمكنك استخدام apt. للوصول إلى مستودعاته، قم بتشغيل:
sudo apt updateثم قم بتثبيت Prometheus:
sudo apt install prometheus -yبالنسبة للمنصات الأخرى، يرجى اتباع تعليمات التثبيت الموجودة على الموقع الرسمي.
بعد التثبيت، ستحتاج إلى إضافة مكتبة مُصدِّر JMX لـ Prometheus إلى تثبيت Kafka. انتقل إلى صفحة الإصدارات واختر أحدث إصدار يحمل اسم javaagent. وقت كتابة هذا التقرير، كان أحدث إصدار متاح هو 0.20.0. استخدم الأمر التالي لتنزيله إلى مجلد libs/ حيث تم تثبيت Kafka:
curl https://repo.maven.apache.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.20.0/jmx_prometheus_javaagent-0.20.0.jar -o ~/kafka/libs/jmx_prometheus_javaagent.jarسيتم الآن تحديد مكتبة التصدير JMX بواسطة Kafka.
قبل تفعيل المُصدِّر، عليك تحديد المقاييس التي سيُبلغ بها إلى بروميثيوس، ثم احفظ هذا التكوين في ملف jmx-exporter.yml ضمن ملف config/ الخاص بتثبيت كافكا. يوفر مشروع مُصدِّر JMX تكوينًا افتراضيًا مناسبًا، لذا شغِّل الأمر التالي لحفظه باسم jmx-exporter.yml ضمن ملف config/ الخاص بتثبيت كافكا:
curl https://raw.githubusercontent.com/prometheus/jmx_exporter/main/example_configs/kafka-2_0_0.yml -o ~/kafka/config/jmx-exporter.ymlبعد ذلك، عليك تعديل خدمة Kafka systemd لتفعيل المُصدِّر. عليك تعديل متغير بيئة KAFKA_OPTS ليشمل المُصدِّر وتكوينه. نفِّذ الأمر التالي لتعديل الخدمة:
sudo systemctl edit --full kafkaقم بتغيير سطر البيئة إلى التالي:
Environment="KAFKA_OPTS=-Djava.security.auth.login.config=/home/kafka/kafka/config/kraft/kafka-server-jaas.conf -javaagent:/home/kafka/kafka/libs/jmx_prometheus_javaagent.jar=7075:/home/kafka/kafka/config/jmx-exporter.yml"
هنا، يمكنك استخدام وسيطة -javaagent لتهيئة مُصدِّر JMX بتكوينه.
عندما تنتهي، احفظ الملف وأغلقه، ثم ابدأ تشغيل Kafka عن طريق تشغيل:
sudo systemctl restart kafkaبعد دقيقة واحدة، تأكد من تشغيل مُصدِّر JMX عن طريق الاستعلام عما إذا كان المنفذ 7075 قيد الاستخدام:
sudo ss -tunelp | grep 7075يجب أن يبدو الناتج مثل هذا:
Outputtcp LISTEN 0 3 *:7075 *:* users:(("java",pid=6311,fd=137)) uid:1000 ino:48151 sk:8 cgroup:/system.slice/kafka.service v6only:0 <->يشير هذا السطر إلى أن المنفذ 7075 يستخدم بواسطة عملية Java التي بدأت بواسطة خدمة Kafka التي تشير إلى مُصدِّر JMX.
الآن، ستقوم بتكوين بروميثيوس لمراقبة مقاييس JMX المُصدَّرة. ملف التكوين الرئيسي موجود في /etc/prometheus/prometheus.yml، لذا افتحه للتعديل:
sudo nano /etc/prometheus/prometheus.ymlابحث عن الأسطر التالية:
...
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
scrape_timeout: 5s
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: node
# If prometheus-node-exporter is installed, grab stats about the local
# machine by default.
static_configs:
- targets: ['localhost:9100']في قسم scrape_configs الذي يحدد نقاط النهاية التي يجب على Prometheus مراقبتها، أضف قسمًا جديدًا لجمع مقاييس Kafka:
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# Override the global default and scrape targets from this job every 5 seconds.
scrape_interval: 5s
scrape_timeout: 5s
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: node
# If prometheus-node-exporter is installed, grab stats about the local
# machine by default.
static_configs:
- targets: ['localhost:9100']
- job_name: 'kafka'
static_configs:
- targets: ['your_domain:7075']تحتوي مهمة Kafka على هدف يشير إلى نقطة نهاية تصدير JMX.
تذكر استبدال your_domain باسم نطاقك، ثم احفظ الملف وأغلقه. ثم شغّل Prometheus بتشغيل:
sudo systemctl restart prometheusفي متصفحك، انتقل إلى المنفذ 9090 على نطاقك. ستصل إلى واجهة بروميثيوس. في قسم "الحالة"، انقر على "الأهداف" لعرض المهام:
لاحظ أن بروميثيوس قد استولى على مشروع كافكا وبدأ باستخراج مقاييسه. ستتعلم الآن كيفية الوصول إليها في غرافانا.
استعلام عن المقاييس في Grafana
كجزء من المتطلبات الأساسية، ثبّتتَ Grafana على Droplet الخاص بكَ وأضفتَه إلى your_domain. انتقل إليه في متصفحك، وفي قسم "الاتصالات" بالشريط الجانبي، انقر على "إضافة اتصال جديد"، ثم اكتب Prometheus في حقل البحث.
انقر على بروميثيوس، ثم انقر على زر "إضافة مصدر بيانات جديد" في أعلى اليمين. سيُطلب منك إدخال عنوان مثيل بروميثيوس:
أدخل http://your_domain_name:9090، مع استبدال اسم نطاقك الحالي، ثم مرر للأسفل واضغط على "حفظ واختبار". ستظهر لك رسالة نجاح.
تمت إضافة اتصال بروميثيوس إلى غرافانا. اضغط على "استكشاف" في الشريط الجانبي، وسيُطلب منك تحديد مقياس. يمكنك كتابة kafka_ لعرض جميع المقاييس المتعلقة بالمجموعة، كما هو موضح:
على سبيل المثال، حدد مقياس kafka_log_log_size، الذي يُظهر حجم سجل القرص الداخلي في كل قسم، ثم اضغط على "تشغيل الاستعلام" في الزاوية العلوية اليمنى. ستظهر لك الأحجام الناتجة بمرور الوقت لكل موضوع من المواضيع المتاحة:
في هذه المرحلة، قمتَ بإعداد مقاييس مُصدِّر JMX التي يوفرها Kafka، وقمتَ بتكوين Prometheus لجمعها. بعد ذلك، اتصلتَ به من داخل Grafana، وأجريتَ استعلامًا على مقاييس Kafka. ستتعلم الآن كيفية إدارة مجموعة Kafka باستخدام واجهة ويب.
الخطوة 4 - إدارة مجموعات Kafka باستخدام AKHQ
في هذه الخطوة، ستتعلم كيفية إعداد واستخدام AKHQ، وهو تطبيق ويب لإدارة مجموعات Kafka. يتيح لك هذا التطبيق سرد المواضيع والأقسام ومجموعات المستخدمين ومعلمات التكوين والتحكم فيها، بالإضافة إلى إنشاء رسائل من المواضيع ومعالجتها من موقع واحد.
ستحفظ الملف التنفيذي وملف إعداداته في مجلد يُسمى akhq. أنشئه في مجلدك الرئيسي بتنفيذ الأمر التالي:
mkdir ~/akhqاذهب إليه:
cd ~/akhqفي متصفحك، تفضل بزيارة صفحة الإصدارات الرسمية وانسخ رابط أحدث ملف JAR. وقت كتابة هذا التقرير، كان الإصدار الأخير 0.24.0. نفّذ الأمر التالي لتنزيله على جهازك:
curl -L https://github.com/tchiotludo/akhq/releases/download/0.24.0/akhq-0.24.0-all.jar -o ~/akhq/akhq.jarلقد نزّلتَ الآن AKHQ، وأنتَ جاهزٌ لتعريف إعداداته للاتصال بمجموعة الخوادم لديك. ستحفظه في ملفٍّ باسم akhq-config.yml. أنشئه وافتحه للتعديل بتنفيذ الأمر التالي:
nano ~/akhq/akhq-config.ymlأضف الأسطر التالية:
akhq:
connections:
localhost-sasl:
properties:
bootstrap.servers: "localhost:9092"
security.protocol: SASL_SSL
sasl.mechanism: PLAIN
sasl.jaas.config: org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="admin";
ssl.truststore.location: /home/kafka/kafka-ssl/truststore/kafka.truststore.jks
ssl.truststore.password: secret
ssl.keystore.location: /home/kafka/kafka-ssl/keystore/kafka.keystore.jks
ssl.keystore.password: secret
ssl.key.password: secret
ssl.endpoint.identification.algorithm: ""هذا تكوين أساسي لـ AKHQ يُحدد مجموعة على localhost:9092 مع معلمات SASL وTLS المُحددة. كما يُدعم إنشاء مجموعات متعددة في آنٍ واحد، حيث يُمكنك تعريف أي عدد من الاتصالات تُريده. هذا يجعل AKHQ مُتعدد الاستخدامات لإدارة Kafka. عند الانتهاء، احفظ الملف وأغلقه.
بعد ذلك، عليك تعريف خدمة systemd لتشغيل AKHQ في الخلفية. يمكن تشغيل خدمات Systemd وإيقافها وإعادة تشغيلها باستمرار.
يمكنك تخزين إعدادات الخدمة في ملف باسم code-server.service في مجلد /lib/systemd/system، حيث يخزن systemd خدماته. أنشئه باستخدام محرر النصوص الخاص بك:
sudo nano /etc/systemd/system/akhq.serviceأضف الأسطر التالية:
[Unit]
Description=akhq
[Service]
Type=simple
User=kafka
ExecStart=/bin/sh -c 'java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jar'
Restart=on-abnormal
[Install]
WantedBy=multi-user.targetأولاً، حدد وصف الخدمة. ثم في حقل [الخدمة]، حدد نوع الخدمة (يعني بسيط أن الأمر يجب تنفيذه ببساطة) وأدخل الأمر الذي سيتم تنفيذه. حدد أيضًا أن المستخدم الذي سيتم تشغيله هو kafka، وأنه يجب إعادة تشغيله تلقائيًا عند إغلاق الخدمة.
يُرشد قسم [التثبيت] النظام لبدء هذه الخدمة عند تسجيل الدخول إلى خادمك. عند الانتهاء، احفظ الملف وأغلقه.
قم بتحميل إعدادات الخدمة عن طريق تشغيل:
sudo systemctl daemon-reloadابدأ خدمة AKHQ عن طريق تشغيل الأمر التالي:
sudo systemctl start akhqثم تأكد من بدء التشغيل بشكل صحيح من خلال عرض حالته:
sudo systemctl status akhqيجب أن يبدو الناتج مثل هذا:
Output● akhq.service - akhq
Loaded: loaded (/etc/systemd/system/akhq.service; disabled; vendor preset: enabled)
Active: active (running) since Wed 2024-05-15 07:37:10 UTC; 3s ago
Main PID: 3241 (sh)
Tasks: 21 (limit: 4647)
Memory: 123.3M
CPU: 4.474s
CGroup: /system.slice/akhq.service
├─3241 /bin/sh -c "java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jar"
└─3242 java -Dmicronaut.config.files=/home/kafka/akhq/akhq-config.yml -jar /home/kafka/akhq/akhq.jarيعمل AKHQ الآن في الخلفية. افتراضيًا، يتم عرضه على المنفذ 8080. في متصفحك، انتقل إلى نطاقك الذي يستخدم هذا المنفذ للوصول إليه. سيظهر لك العرض الافتراضي، والذي يعرض قائمة بالمواضيع:
يمكنك النقر نقرًا مزدوجًا فوق الصف الذي يحتوي على الموضوع في الجدول للوصول إليه للحصول على عرض تفصيلي:
يتيح لك AKHQ عرض الرسائل في الموضوع، بالإضافة إلى الأقسام ومجموعات المستخدمين وتكويناتها. كما يمكنك تفريغ الموضوع أو نسخه باستخدام الأزرار الموجودة أسفل اليمين.
نظرًا لأن موضوع new_topic فارغ، اضغط على زر "إنتاج إلى الموضوع"، والذي يفتح الواجهة لاختيار معلمات الرسالة الجديدة:
سيقوم AKHQ تلقائيًا بملء اسم الموضوع نيابةً عنك. في حقل القيمة، أدخل "مرحبًا بالعالم!"، ثم اضغط على "إنتاج". سيتم إرسال الرسالة إلى كافكا وستظهر في تبويب "البيانات".
لأن محتوى الرسالة قد يكون كبيرًا جدًا، يعرض AKHQ السطر الأول فقط. لعرض الرسالة كاملةً، انقر على المنطقة الداكنة بعد السطر لإظهارها.
في الشريط الجانبي الأيسر، يمكنك عرض وسطاء المجموعة بالنقر على "العُقد". حاليًا، تتكون المجموعة من عُقدة واحدة فقط:
النقر المزدوج على عقدة يفتح تكوينها، مما يسمح لك بتغيير أي من الإعدادات عن بعد:
بعد إجراء التغييرات، يمكنك تطبيقها بالضغط على زر "تحديث الإعدادات" أسفل اليمين. وبالمثل، يمكنك عرض إعدادات كل سمة وتغييرها بالوصول إليها والانتقال إلى علامة تبويب "الإعدادات".
في هذا القسم، قمتَ بإعداد AKHQ، وهو تطبيق ويب يوفر واجهة سهلة الاستخدام لإدارة وعرض عُقد ومواضيع Kafka عن بُعد. يتيح لك التطبيق إنشاء الرسائل ومعالجتها في المواضيع، وتحديث معلمات تكوين كلٍّ من المواضيع والعُقد فورًا.
نتيجة
في هذا البرنامج التعليمي، قمتَ بتأمين تثبيت Kafka الخاص بك من خلال تكوين TLS للتشفير وSASL لمصادقة المستخدم. كما قمتَ بإعداد عمليات تصدير المقاييس باستخدام Prometheus وعرضها في Grafana. بعد ذلك، تعلمتَ كيفية استخدام AKHQ، وهو تطبيق ويب لإدارة مجموعات Kafka.





















