كيفية تأمين ومراقبة Kafka

مقدمة

Apache Kafka يدعم مجموعة متنوعة من بروتوكولات الأمان وإجراءات المصادقة لضمان أن فقط الموظفين والتطبيقات المخولين فقط يمكنهم الاتصال بالمجموعة. في التكوين الافتراضي، يسمح Kafka بالوصول للجميع ولكنه لا يحتوي على فحوصات أمان مفعلة. بينما يكون ذلك مفيدًا للاستكشاف والتطوير، يجب تأمين تفريغات الإنتاج بشكل صحيح قبل العرض للعالم الخارجي. أيضًا، يجب مراقبة هذه البيئات لضمان العمل السلس ومنع الفشل المحتمل.

في هذا الدليل، ستقوم بتقوية تثبيت Kafka الخاص بك عن طريق تكوين تشفير حركة الاتصال TLS والمصادقة SASL لتوفير جرس اسم المستخدم وسياسة تسجيل الدخول. ستتعلم كيفية تكوين النصائح المقدمة للمنتج والمستهلك للاتصال بمجموعة مؤمنة. ثم، ستتعلم كيفية تصدير مقاييس Kafka وتصورها في Grafana. ستتعلم أيضًا كيفية الوصول إلى نقاط مجموعة الخاصة بك والمواضيع من خلال واجهة الويب السهلة الاستخدام والمقدمة من AKHQ.

المتطلبات السابقة

لإكمال هذا الدليل، ستحتاج إلى:

  • أقلامة تحتوي على حد أدنى 4 جيجابايت من الذاكرة و2 معالجات. في حالة خادم Ubuntu، اتبع التعليمات لإعداد الخادم بفضل إعداد الخادم الأساسي
  • Apache Kafka مثبت ومهيأ على أقلامتك. للحصول على التعليمات، اتبع دليل مقدمة إلى Kafka. يجب عليك الانتهاء من الخطوة 1 والخطوة 2</diy6 فقط
  • فهم كيفية التعامل لـ Java بالمفاتيح والشهادات. للمزيد من المعلومات، زر دليل أساسيات Java Keytool: العمل مع مستودعات المفاتيح في Java
  • Grafana مثبت على خادمك أو جهازك المحلي. من فضلك زر دليل كيفية تثبيت وتأمين Grafana على Ubuntu للحصول على التعليمات. تحتاج فقط إلى الانتهاء من الخطوات الأولى أربعة.
  • اسم مجموعة مسجل بالكامل يشير إلى أقلامتك. سيستخدم هذا الدليل your_domain على مر الحياة وسيشير إلى نفس اسم المجموعة كمتطلب Grafana. يمكنك شراء اسم مجموعة على Namecheap، أو الحصول على واحد مجاني على Freenom، أو استخدام مسجل المجموعة لأختيارك.

خطوة 1 – ت配置 Kafka مع البرمجيات الأمنية

في إعداداتها الافتراضية، تسمح كافكا للجميع بالاتصال بها بدون تحقيق مصدر ال solicitud. هذا يعني أن مجموعتك قابلة للوصول بالفعل للجميع. بينما تكون ذلك جيدا للتجربة، لأنه يخفض عبء المعدات المحلية والتثبيتات الخاصة، التكوينات الإنتاجية والمعروفة للعملاء والتي توجه إلى المجموعة يتوجب تفعيل ميزات الأمن لمنع الوصول الغير مسموح به.

في هذه الخطوة، ستقوم بتكوين مضيف كافكا خاصتك لاستخدام التشفير 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، ويتطلب منك تزويدين بمتغيرات بيئية تحتوي على البلد، والولاية، والمنظمة، والمدينة. هذه المعلمات تُستخدم لإنشاء الشهادات، ولكن محتواها لا يهم. ستحتاج أيضًا لتزويد باسم رمز، والذي يُستخدم لتأمين مستودع الثقة والمفاتيح الجافية التي سيتم إنشاؤها.

قم بتشغيل الأوامر التالية لإعداد المتغيرات البيئية المطلوبة، مع استبدال your_tls_password بالقيمة التي ترغب فيها:

export COUNTRY=US
export STATE=NY
export ORGANIZATION_UNIT=SE
export CITY=New York
export PASSWORD=your_tls_password

لاحظ أن PASSWORD يجب أن يكون على الأقل ستة أحرفًا.

قم بمنح السكربت الأذونات التنفيذية عن طريق تشغيل:

chmod +x kafka-generate-ssl-automatic.sh

ثم، قم بتنفيذه لإنشاء الملفات المطلوبة:

./kafka-generate-ssl-automatic.sh

سيكون هناك الكثير من الإخراج. عند الانتهاء، قم بإدراج الملفات في الدليل:

ls -l

يجب أن يكون الإخراج مشابهًا لهذا:

Output
rw-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 في ال directorio de instalación. قمت بتنسيقه في kafka في دراجتك الشخصية كجزء من الأولويات الأساسية. تحويل إليه عن طريق التشغيل:

cd ~/kafka

فتح الملف الأساسي للتعديل:

nano config/kraft/server.properties

إيجاد السطور التالية:

config/kraft/server.properties
...
listeners=PLAINTEXT://:9092,CONTROLLER://:9093

# اسم المستمع المستخدم للتواصل بين المضيفات.
inter.broker.listener.name=PLAINTEXT

# اسم المستمع، اسم الجهة الموجودة والمركز الذي سيرسل المضيف إلى الزبائن.
# إذا لم يتم تعيينه، يستخدم قيمة "listeners".
advertised.listeners=PLAINTEXT://localhost:9092

قم بتعديلها لتبدو مثل هذه، و تحويل PLAINTEXT إلى BROKER:

config/kraft/server.properties
...
listeners=BROKER://:9092,CONTROLLER://:9093

# اسم المستمع المستخدم للتواصل بين المضيفات.
inter.broker.listener.name=BROKER

# اسم المستمع، اسم الجهة الموجودة والمركز الذي سيرسل المضيف إلى الزبائن.
# إذا لم يتم تعيينه، يستخدم قيمة "listeners".
advertised.listeners=BROKER://localhost:9092

ومن ثم إيجاد السطور listener.security.protocol.map:

config/kraft/server.properties
# تخزين اسماء المستمعين على الأجهزة الأمنية، يتم تعيينهم بالفعل بما فيه المتوسط. يمكنك معرفة المزيد من التوثيق المتعلق بالإعدادات.
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

تخزين BROKER بـ SASL_SSL بإبدال تعريف التوجيه إلى القيمة:

config/kraft/server.properties
# تخزين اسماء المستمعين على الأجهزة الأمنية، يتم تعيينهم بالفعل بما فيه المتوسط. يمكنك معرفة المزيد من التوثيق المتعلق بالإعد
listener.security.protocol.map=BROKER:SASL_SSL,CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL

هنا، قمت بإضافة تعريف للاختصار BROKER الذي أستخدمته في المستمعين ووصلته إلى SASL_SSL، وهو يعني أن الTLS (الاسم السابق للTLS) والSASL سيستعملان.

من ثم، تحرك إلى نهاية الملف وأضف الأخطاء التالية:

config/kraft/server.properties
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

أولاً تحددت المواقع والكلمات السرية للمخزونات المنتجة للثقة والمخزونات المفاتيح. أضفت ما يتمثل في ما يلي:

أخيرًا، أضفت الStandardAuthorizer كفصيل المصرحين، التي تفحص تلك المعلومات ضد ملف تكوين سوف تقوم بإنشائه قريبًا. وأضفت ما يتمثل في ما يلي:

أتذكر أن عليك أستبدال your_tls_password بكلمة المرور التي أعطيتها لل脚本 في القسم السابق، ومن ثم حفظ وغلق الملف.

قمت ب配置 Kafka، سيتوجب عليك إنشاء ملف يحدد المعاملات المسموحة للاتصال. Kafka يدعم (JAAS)، الخدمة اليابانية للتحقق والتسمية، إطار لتنفيذ الأعمال التعقيدية للتحقق، ويقبل تعريفات المعاملات في تشكيل JAAS.

سوف تقوم بتخزينها في ملف يدعى kafka-server-jaas.conf في config/kraft. قم بتشغيله وفتحه للتحرير بتنفيذ:

nano config/kraft/kafka-server-jaas.conf

أضف ال行هذه التالية:

config/kraft/kafka-server-jaas.conf
KafkaServer {
 org.apache.kafka.common.security.plain.PlainLoginModule required
 username="admin"
 password="admin"
 user_admin="admin";
};

يحددون username و password المعاملات الرئيسية التي يستخدم للتواصل بين المراسلين في المجموعة عندما يوجد عدد من النقاط. خط ال user_admin يحدد مستخدمًا يدعى admin بمرور admin، ويمكنه الاتصال بالمراسل من الخارج. حفظ وغلق الملف عندما ينتهي ذلك.

Kafka يحتاج إلى معرفة ملف kafka-server-jaas.conf لأنه يتكافؤ مع التكوين الرئيسي. سيتوجب عليك تعديل تكوين خدمة kafka systemd وتمرير مرجع له. قم بتنفيذ أوامر التحكم لتتوافر الخدمة للتحرير:

sudo systemctl edit --full kafka

باستخدام --full، ستحصل على حصة في محتويات الخدمة بأكملها. ابحث عن خط ExecStart:

kafka.service
...
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'
...

أضف خط تلقائيًا فوقه ليبدو كهذا:

kafka.service
...
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 المقدمة مع السكربتات الكونسول.

تستخدم السكربتات المقدمة للتلاعب بالمواضيع وإنتاج واستهلاك الرسائل أيضًا جافاً داخليًا، وبالتالي تقبل تكوين JAAS يتضمن مواقع مستودعات الثقة والمفاتيح، بالإضافة إلى بيانات اعتماد SASL.

ستخزن تلك التكوين في ملف يُدعى client-jaas.conf في دليل المنزل الخاص بك. أنشئه وافتحه للتحرير:

nano ~/client-jaas.conf

أضف الأسطر التالية:

~/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 وتقدم المعلومات الشخصية للمستخدم admin. تتبع بوضوح تعويض ssl.endpoint.identification.algorithm المادة لتجنب مشاكل الاتصال، لأن الscript الأولي يضع اسم الجهة المستخدمة للماكينة التي يتم تشغيلها كنقطة الشهادة التي قد لا تكون صحيحة.

أستبدل your_tls_password بالقيمة الصحيحة، ثم أنقر وإغلاق الملف.

لتأتي هذا الملف إلى الscripts، يمكنك استخدام المادة --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 – مراقبة معدات JMX Kafka باستخدام Prometheus

في هذا القسم ستستخدم بروميثيوس لجمع معدات كافكا وجعلها قابلة للبحث في غرافانا. وهذا يتطلب تعيين مصدر JMX المتعدد لكافكا وربطه ببروميثيوس.

[التوسعات التنظيمية للجافا (JMX) هي إطار توظيفي للتطبيقات الجافايية التي تسمح للمطورين بجمع المعدات العامة والخاصة عن تشغيل التطبيق في تنظيم معين خلال الوقت الحالي. ولأن كافكا مكتوبة بواسطة الجافا، فهي تدعم البروتوكول JMX وتكشف عن معداتها الخاصة من خلاله، مثل حالة المواضيع والمضيفين.

تكييف كافكا وبروميثيوس

قبل أن تستمر، سيتوجب عليك تثبيت بروميثيوس. على آلات Ubuntu، يمكنك استخدام apt. ويتم تحديث المتاجر بالقيام بتلك الأجراء:

sudo apt update

ثم، تثبيت بروميثيوس:

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.

قبل تفعيل المصدر، تحتاج إلى تحديد ما هي المقاييس التي سيتم تقديمها إلى Prometheus، وستخزن هذه الإعدادات في ملف يسمى jmx-exporter.yml تحت config/ من تثبيت Kafka. يوفر مشروع مصدر JMX تكوين افتراضي مناسب، لذا ا運行 الأمر التالي لتخزينه كـ jmx-exporter.yml تحت config/ من تثبيت Kafka الخاص بك:

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.service
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
Output
tcp 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.

ستقوم الآن بتكوين Prometheus لمراقبة المقاييس JMX المصادرة. ملف التكوين الرئيسي له موجود في /etc/prometheus/prometheus.yml، لذا افتحه للتحرير:

sudo nano /etc/prometheus/prometheus.yml

ابحث عن الأسطر التالية:

/etc/prometheus/prometheus.yml
...

# تكوين مجموعة الاستكشاف الحاوية بالضبط نقطة انتهاء واحدة للاستكشاف:


# هنا يكون Prometheus نفسه.

scrape_configs:
  
# يتم إضافة اسم الوظيفة كتسمية `job=<اسم_الوظيفة>` إلى أي سلسلة زمنية مستكشفة من هذا التكوين.

  - job_name: 'prometheus'

    
# تجاوز الإعداد العالمي الافتراضي واستكشاف الأهداف من هذه الوظيفة كل 5 ثوانٍ.

    scrape_interval: 5s
    scrape_timeout: 5s

    
# metrics_path الافتراضي هو '/metrics'

    
# scheme الافتراضي هو 'http'.


    static_configs:
      - targets: ['localhost:9090']

  - job_name: node
    
# إذا كان مثبتًا prometheus-node-exporter، احصل على إحصائيات عن الجهاز المحلي

    
# بشكل افتراضي.

    static_configs:
      - targets: ['localhost:9100']

تحت scrape_configs، الذي يحدد أي نقاط انتها Prometheus يجب مراقبتها، أضف قسمًا جديدًا لاستكشاف مقاييس Kafka:

/etc/prometheus/prometheus.yml
配置一个抓取包含确切一个端点来抓取:
# 这里是Prometheus本身。
scrape_configs:
  # 作业名称作为标签 `job=<作业名称>` 添加到从此配置中抓取的任何时间序列。
  - job_name: 'prometheus'

    # 覆盖全局默认值,并每5秒从这个作业中抓取目标。
    scrape_interval: 5s
    scrape_timeout: 5s

    # 默认指标路径为 '/metrics'。
    # 默认方案为 'http'。

    static_configs:
      - targets: ['localhost:9090']

  - job_name: node
    # 如果安装了prometheus-node-exporter,默认获取关于本地机器的统计信息。
    # 
    static_configs:
      - targets: ['localhost:9100']

  - job_name: 'kafka'
    static_configs:
    - targets: ['your_domain:7075']

kafka 作业有一个目标,指向JMX导出器端点。

请记得用你的域名替换 your_domain,然后保存并关闭文件。接着,运行以下命令重启Prometheus:

sudo systemctl restart prometheus

在你的浏览器中,导航到你的域的 9090 端口。你将访问Prometheus UI。在 Status 下,点击 Targets 以列出作业:

请注意,Prometheus已经接受了 kafka 作业并开始抓取其指标。现在你将学习如何在Grafana中访问它们。

استعلام مقاييس في جرافانا

كجزء من الشروط الأساسية، لقد قمت بتثبيت جرافانا على حجرتك وتمكنت من عرضها على your_domain. انتقل إليها في متصفحك، وتحت الاتصالات في الشريط الجانبي، اضغط على إضافة اتصال جديد، ثم أدخل بروميثيوس في حقل البحث.

اضغط على بروميثيوس، ثم انقر على زر إضافة مصدر بيانات جديد في الزاوية السماوية اليمنى. سيطلب منك تعبئة عنوان حالة من بروميثيوس:

أدخل http://your_domain_name:9090، استبدل باسم النطاق الخاص بك الفعلي، ثم انتقل إلى الأسفل واضغط على حفظ واختبار. يجب أن تتلقى رسالة نجاح:

تم إضافة اتصال بروميثيوس إلى جرافانا. اضغط على استكشاف في الشريط الجانبي، وسيطلب منك اختيار مقياس. يمكنك كتابة kafka_ لإدراج جميع المقاييس ذات الصلة بالمجموعة، كما هو موضح:

على سبيل المثال، اختر مقياس kafka_log_log_size، الذي يظهر حجم السجل الداخلي على القرص لكل تقسيم، ثم اضغط على تشغيل الاستعلام في الزاوية السماوية اليمنى. سترى الأحجام الناتجة عبر الوقت لكل المواضيع المتاحة:

في هذه الخطوة، قمت بإعداد تصدير مقاييس JMX التي توفرها كافكا وتكوين بروميثيوس لجمعها. ثم، قمت بالاتصال به من خلال جرافانا وتشغيل استعلام على مقاييس كافكا. الآن ستتعلم كيفية إدارة مجموعة كافكا باستخدام واجهة الويب.

الخطوة 4 – إدارة مجموعات كافكا باستخدام AKHQ

في هذه الخطوة، ستتعلم كيفية إعداد واستخدام AKHQ، تطبيق واجهة الويب لإدارة مجموعات كافكا. يتيح لك ذلك الحصول على قائمة وتحرير المواضيع، والأجزاء، ومجموعات المستهلكين ومعاملات الإعداد، بالإضافة إلى إنتاج واستهلاك الرسائل من المواضيع من موقع واحد.

ستخزن البرنامج التنفيذي وتكوينه في دليل يُدعى 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/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

أضف الأسطر التالية:

/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

أولاً تحديد وصف الخدمة. ثم، في قسم [Service]، تحدد نوع الخدمة (simple يعني أن الأمر يجب أن يتم تنفيذه ببساطة) وتقدم الأمر الذي سيتم تشغيله. كما تحدد أن المستخدم الذي يتم تشغيله به هو kafka وأن يتم إعادة تشغيل الخدمة تلقائيًا إذا انتهت.

في قسم [Install]، تأمر systemd ببدء هذه الخدمة عندما تتمكن من تسجيل الدخول إلى الخادم الخاص بك. احفظ وأغلق الملف عند الانتهاء منه.

حمل تكوين الخدمة عن طريق تشغيل:

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 سيملأ اسم الموضوع تلقائيًا لك. في حقل القيمة، أدخل Hello World!، ثم اضغط على إنتاج. سيتم إرسال الرسالة إلى Kafka، وستراها في تبويب البيانات:

لأن محتوى الرسالة قد يكون كبيرًا جدًا، AKHQ يعرض فقط السطر الأول. لرؤية الرسالة الكاملة، اضغط على المنطقة المظلمة بعد الصف لإكشافها.

في الشريط الجانبي الأيسر، يمكنك أيضًا عرض قائمة المزودين في الكلاستر عن طريق النقر على العقد. حاليًا، يتكون الكلاستر من عقدة واحدة فقط:

النقر المزدوج على عقدة سيفتح تكوينها، مما يمكنك من تغيير أي من الإعدادات عن بُعد:

وبمجرد تمكينك عن التغييرات، يمكنك تطبيقها بالضغط على زر 更新配置 في الأسفل اليمنى. بمثابة المماثلة، يمكنك مشاهدة وتعديل تكوينات أي من المواضيع بالوصول إليها وانتقالإلى لوحة Configs.

في هذا القسم، قمت بإنشاء AKHQ، تطبيق شبكي يوفر واجهة إستخدام سهلة لإدارة ومراقبة نوات Kafka ومواضيعها عن بعد. يسمح لك بإنتاج واستهلاك الرسائل في المواضيع وتحديث ما يتمتع بالمادة التكوينية للمواضيع والنوات بشكل مباشر.

ختام

في هذا التورية، أنت قمت بتأمين تثبيتك الخاص ب Kafka بإعداد TLS للتشفير و SASL للتحقق بواسطة المستخدمين. أيضًا، قمت بإعداد تصدير المؤشرات باستخدام Prometheus وتخيلها في Grafana. بعد ذلك، تعلمت كيفية استخدام AKHQ، تطبيق لإدارة قبالات Kafka.


أخذ المؤلف Apache Software Foundation للتبرع كجزء من برنامج Write for DOnations..

Source:
https://www.digitalocean.com/community/developer-center/how-to-secure-and-monitor-kafka