مقدمه
آپاچی کافکا از پروتکل های امنیتی مختلف و گردش کار احراز هویت پشتیبانی می کند تا اطمینان حاصل کند که فقط پرسنل و برنامه های مجاز می توانند به خوشه متصل شوند. در پیکربندی پیشفرض، کافکا به همه اجازه دسترسی میدهد اما هیچ بررسی امنیتی فعال نیست. در حالی که برای کاوش و توسعه مفید است، استقرار تولید باید قبل از قرار گرفتن در معرض دنیای خارج به درستی ایمن شود. همچنین، برای اطمینان از عملکرد روان و جلوگیری از خرابی های احتمالی، چنین محیط هایی باید نظارت شوند.
در این آموزش، نصب کافکا خود را با پیکربندی رمزگذاری ترافیک TLS و احراز هویت SASL برای ارائه یک نام کاربری استاندارد و جریان ورود رمز عبور سخت تر می کنید. نحوه پیکربندی اسکریپت های تولید کننده و مصرف کننده ارائه شده برای اتصال به یک خوشه ایمن را خواهید دید. سپس، یاد خواهید گرفت که چگونه معیارهای کافکا را صادر کنید و آنها را در Grafana تجسم کنید. همچنین نحوه دسترسی به گره ها و موضوعات خوشه خود را از طریق یک رابط کاربری آسان و مبتنی بر وب که توسط AKHQ ارائه شده است، یاد خواهید گرفت.
پیش نیازها
- قطره ای با حداقل 4 گیگابایت رم و 2 پردازنده. در مورد سرور اوبونتو، برای دستورالعملهای راهاندازی، تنظیمات اولیه سرور را دنبال کنید.
- آپاچی کافکا روی قطره شما نصب و پیکربندی شده است. برای دستورالعمل های راه اندازی، آموزش مقدمه ای بر کافکا را دنبال کنید. شما فقط باید مرحله 1 و مرحله 2 را کامل کنید.
- درک نحوه مدیریت جاوا با کلیدها و گواهی ها. برای اطلاعات بیشتر، به آموزش Java Keytool Essentials: Working with Java Keystores مراجعه کنید.
- Grafana روی سرور یا ماشین محلی شما نصب شده است. لطفاً برای دستورالعمل ها به آموزش نحوه نصب و ایمن کردن Grafana در اوبونتو مراجعه کنید. شما فقط باید چهار مرحله اول را کامل کنید.
- یک نام دامنه کاملاً ثبت شده به قطره شما اشاره می کند. این آموزش از your_domain در سراسر استفاده می کند و به همان نام دامنه ای که پیش نیاز Grafana است اشاره می کند. می توانید یک نام دامنه را در Namecheap خریداری کنید، یک نام دامنه را به صورت رایگان در Freenom دریافت کنید، یا از ثبت کننده دامنه انتخابی خود استفاده کنید.
مرحله 1 – پیکربندی پروتکل های امنیتی کافکا
در پیکربندی سهام خود، کافکا به همه اجازه میدهد بدون بررسی منشا درخواست به آن متصل شوند. این بدان معنی است که خوشه شما به طور پیش فرض برای همه قابل دسترسی است. در حالی که برای آزمایش خوب است، زیرا بار تعمیر و نگهداری ماشینهای محلی و تاسیسات خصوصی را کاهش میدهد، تولید و تاسیسات کافکا در سطح عمومی باید دارای ویژگیهای امنیتی فعال برای جلوگیری از دسترسی غیرمجاز باشند.
در این مرحله، کارگزار کافکا خود را برای استفاده از رمزگذاری TLS برای ترافیک بین کارگزار و مصرفکنندگان پیکربندی میکنید. شما همچنین SASL را به عنوان چارچوب احراز هویت برای تأیید اعتبار هنگام اتصال به خوشه تنظیم خواهید کرد.
تولید گواهی TLS و فروشگاه ها
برای ایجاد گواهیها و کلیدهای مورد نیاز برای راهاندازی TLS، از اسکریپت موجود در مخزن Confluent Platform Security Tools استفاده خواهید کرد. ابتدا با اجرای دستور زیر آن را در فهرست اصلی خود کلون کنید:
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
خروجی باید شبیه به این باشد:
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
خواهید دید که گواهی، اعتماد و فروشگاه کلید با موفقیت ایجاد شده است.
پیکربندی کافکا برای TLS و SASL
اکنون که فایلهای لازم برای فعال کردن رمزگذاری TLS را دارید، کافکا را برای استفاده از آنها و احراز هویت کاربران با استفاده از SASL پیکربندی میکنید.
فایل server.properties را در قسمت config/kraft در دایرکتوری نصب تغییر خواهید داد. شما آن را تحت کافکا در فهرست اصلی خود به عنوان بخشی از پیش نیازها نصب کرده اید. با اجرای زیر به آن بروید:
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 را روی PLAIN تنظیم می کنید که آن را فعال می کند. PLAIN با PLAINTEXT متفاوت است زیرا نیاز به استفاده از یک اتصال رمزگذاری شده دارد و هر دو به ترکیب نام کاربری و رمز عبور متکی هستند.
در نهایت، StandardAuthorizer را به عنوان کلاس autorizer تنظیم می کنید، که اعتبارنامه ها را در برابر فایل پیکربندی که به زودی ایجاد خواهید کرد، بررسی می کند. سپس، پارامتر allow.everyone.if.no.acl.found را روی false تنظیم میکنید و دسترسی برای اتصالات با اعتبار نامناسب را محدود میکنید. شما همچنین کاربر admin را به عنوان superuser انتخاب میکنید، زیرا باید حداقل یکی برای انجام وظایف مدیریتی در خوشه وجود داشته باشد.
فراموش نکنید که your_tls_password را با رمز عبوری که در قسمت قبل به اسکریپت وارد کرده اید جایگزین کنید، سپس فایل را ذخیره کرده و ببندید.
اکنون که کافکا را پیکربندی کرده اید، باید فایلی ایجاد کنید که اعتبارنامه های مجاز برای اتصال را تعریف کند. کافکا از سرویس احراز هویت و مجوز جاوا (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 قرار می دهید و آن را از پیکربندی اصلی کافکا جدا می کنید. وقتی کارتان تمام شد، فایل را ذخیره و ببندید. بارگیری مجدد تعریف سرویس با اجرای:
sudo systemctl daemon-reload
سپس، کافکا را دوباره راه اندازی کنید:
sudo systemctl restart kafka
اکنون رمزگذاری TLS و احراز هویت SASL را برای نصب Kafka خود پیکربندی کردهاید، و اکنون میآموزید که چگونه با اسکریپتهای کنسول ارائه شده به آن متصل شوید.
مرحله 2 – اتصال به یک خوشه امن
در این مرحله، نحوه اتصال به یک خوشه کافکا ایمن با استفاده از فایلهای پیکربندی JAAS با اسکریپتهای کنسول ارائه شده را یاد خواهید گرفت.
اسکریپتهای ارائهشده برای دستکاری موضوعات تولید و مصرف پیامها نیز از جاوا به صورت داخلی استفاده میکنند و بنابراین پیکربندی 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
...
در این بخش، نصب کافکا خود را برای استفاده از رمزگذاری TLS برای ترافیک و SASL برای احراز هویت با ترکیبی از نام کاربری و رمز عبور پیکربندی کردهاید. اکنون خواهید آموخت که چگونه معیارهای مختلف کافکا را از طریق JMX با استفاده از Prometheus صادر کنید.
مرحله 3 – نظارت بر معیارهای Kafka JMX با استفاده از Prometheus
در این بخش، از Prometheus برای جمع آوری معیارهای کافکا و قابل پرس و جو کردن آنها در Grafana استفاده می کنید. این مستلزم راه اندازی صادرکننده JMX برای کافکا و اتصال آن به پرومتئوس است.
[برنامههای افزودنی مدیریت جاوا (JMX) چارچوبی برای برنامههای جاوا است که به توسعهدهندگان اجازه میدهد تا معیارهای عمومی و سفارشی در مورد عملکرد برنامه را در زمان اجرا در قالبی استاندارد جمعآوری کنند. از آنجایی که کافکا به زبان جاوا نوشته شده است، از پروتکل JMX پشتیبانی می کند و معیارهای سفارشی خود را از طریق آن، مانند وضعیت موضوعات و کارگزاران، به نمایش می گذارد.
پیکربندی کافکا و پرومتئوس
قبل از ادامه، باید Prometheus را نصب کنید. در ماشین های اوبونتو، می توانید از apt استفاده کنید. مخازن آن را با اجرای:
sudo apt update
سپس، Prometheus را نصب کنید:
sudo apt install prometheus -y
برای پلتفرم های دیگر، لطفاً دستورالعمل های نصب را در وب سایت رسمی دنبال کنید.
پس از نصب، باید کتابخانه صادرکننده JMX برای Prometheus را به نصب Kafka خود اضافه کنید. به صفحه نسخهها بروید و آخرین نسخه را با javaagent در نام انتخاب کنید. در زمان نوشتن، آخرین نسخه موجود 0.20.0 بود. از دستور زیر برای دانلود آن در دایرکتوری libs/ که کافکا در آن نصب شده است استفاده کنید:
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 اکنون توسط کافکا انتخاب خواهد شد.
قبل از فعال کردن صادرکننده، باید مشخص کنید که چه معیارهایی به Prometheus گزارش میدهد، و این پیکربندی را در فایلی به نام 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 را به شکل زیر تغییر دهید:
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 با پیکربندی آن استفاده میکنید.
پس از اتمام فایل را ذخیره کرده و ببندید، سپس کافکا را با اجرای:
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 توسط یک فرآیند جاوا استفاده می شود که توسط سرویس 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 که مشخص میکند پرومتئوس کدام نقطههای انتهایی را باید تماشا کند، بخش جدیدی برای خراش دادن معیارهای کافکا اضافه کنید:
# 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']
شغل کافکا یک هدف دارد که به نقطه پایانی صادرکننده JMX اشاره می کند.
به یاد داشته باشید که نام دامنه خود را جایگزین your_domain کنید، سپس فایل را ذخیره و ببندید. سپس، Prometheus را با اجرای:
sudo systemctl restart prometheus
در مرورگر خود، به پورت 9090 در دامنه خود بروید. شما به رابط کاربری Prometheus دسترسی خواهید داشت. در بخش وضعیت، روی Targets فشار دهید تا مشاغل فهرست شوند:
توجه کنید که پرومتئوس شغل کافکا را پذیرفته و شروع به خراش دادن معیارهای آن کرده است. اکنون نحوه دسترسی به آنها را در Grafana خواهید آموخت.
استعلام معیارها در گرافانا
به عنوان بخشی از پیش نیازها، شما Grafana را در Droplet خود نصب کرده اید و آن را در your_domain قرار داده اید. در مرورگر خود به آن بروید و در قسمت Connections در نوار کناری، روی Add New Connection فشار دهید، سپس Prometheus را در قسمت جستجو تایپ کنید.
روی Prometheus فشار دهید، سپس روی دکمه Add New Data Source در سمت راست بالا کلیک کنید. از شما خواسته می شود که آدرس نمونه پرومتئوس را پر کنید:
http://your_domain_name:9090 را وارد کنید، نام دامنه واقعی خود را جایگزین کنید، سپس به پایین بروید و روی Save & test فشار دهید. شما باید یک پیام موفقیت آمیز دریافت کنید:
اتصال Prometheus به Grafana اضافه شده است. کاوش را در نوار کناری فشار دهید، و از شما خواسته می شود که یک معیار را انتخاب کنید. میتوانید در kafka_ تایپ کنید تا تمام معیارهای مربوط به خوشه را فهرست کنید، همانطور که نشان داده شده است:
به عنوان مثال، متریک kafka_log_log_size را انتخاب کنید، که نشان می دهد گزارش داخلی دیسک در هر پارتیشن چقدر بزرگ است، سپس Run query را در گوشه سمت راست بالا فشار دهید. اندازه های حاصل را در طول زمان برای هر یک از موضوعات موجود خواهید دید:
در این مرحله، معیارهای صادرکننده JMX را که کافکا ارائه میکند، تنظیم کردهاید و Prometheus را برای خراش دادن آنها پیکربندی کردهاید. سپس، شما از داخل Grafana به آن متصل شده اید و یک پرس و جو در معیارهای کافکا انجام داده اید. اکنون یاد خواهید گرفت که چگونه یک خوشه کافکا را با استفاده از یک رابط وب مدیریت کنید.
مرحله 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:
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 را برای مدیریت کافکا همه کاره می کند. وقتی کارتان تمام شد، فایل را ذخیره و ببندید.
در مرحله بعد، باید یک سرویس 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
ابتدا توضیحات سرویس را مشخص می کنید. سپس در قسمت [Service] نوع سرویس را تعریف می کنید (ساده به این معنی است که دستور باید به سادگی اجرا شود) و دستوری را که اجرا می شود ارائه می دهید. شما همچنین مشخص میکنید که کاربری که اجرا میشود به عنوان 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 خالی است، دکمه Produce to topic را فشار دهید، که رابط کاربری برای انتخاب پارامترهای پیام جدید باز می شود:
AKHQ به طور خودکار نام موضوع را برای شما پر می کند. در قسمت Value، Hello World! را وارد کنید، سپس Produce را فشار دهید. پیام برای کافکا ارسال می شود و آن را در تب Data خواهید دید:
از آنجایی که محتوای یک پیام ممکن است بسیار بزرگ باشد، AKHQ فقط خط اول را نشان می دهد. برای مشاهده کامل پیام، روی ناحیه تاریک بعد از ردیف فشار دهید تا آن را نشان دهید.
در نوار کناری سمت چپ، میتوانید با فشار دادن روی Nodes، کارگزاران را در خوشه فهرست کنید. در حال حاضر، خوشه فقط از یک گره تشکیل شده است:
با دوبار کلیک کردن روی یک گره، پیکربندی آن باز می شود و به شما امکان می دهد هر یک از تنظیمات را از راه دور تغییر دهید:
پس از ایجاد تغییرات، می توانید با فشار دادن دکمه Update configs در پایین سمت راست، آنها را اعمال کنید. به همین ترتیب، میتوانید پیکربندی هر یک از موضوعات را با دسترسی به آنها و رفتن به تب Configs مشاهده و تغییر دهید.
در این بخش، AKHQ را راهاندازی کردهاید، یک برنامه وب که یک رابط کاربری آسان برای مدیریت و مشاهده گرهها و موضوعات کافکا از راه دور ارائه میدهد. این به شما امکان می دهد پیام ها را در موضوعات تولید و مصرف کنید و پارامترهای پیکربندی هر دو موضوع و گره ها را در حال به روز رسانی کنید.
نتیجه
در این آموزش، نصب Kafka خود را با پیکربندی TLS برای رمزگذاری و SASL برای احراز هویت کاربر، ایمن کردهاید. شما همچنین صادرات متریک را با استفاده از Prometheus تنظیم کرده اید و آنها را در Grafana تجسم کرده اید. سپس، نحوه استفاده از AKHQ، یک برنامه وب برای مدیریت خوشه های کافکا را یاد گرفتید.