- برای این منظور حداقل ۳ سرور نیاز است.
- آدرس IP سرور اول : 192.168.1.1
- آدرس IP سرور دوم : 192.168.1.2
- آدرس IP سرور سوم : 192.168.1.3
نصب Zookeeper
- دستور زیر را بر روی هر ۳ سرور اجرا کنید.
# apt-get update # apt-get -y dist-upgrade
- دستور زیر را بر روی هر ۳ سرور اجرا کنید.
# apt-get install default-jre zookeeperd
- خطوط زیر را به انتهای پروندهی zoo.cfg اضافه نمایید. (درون سرور اول)
# vim /etc/zookeeper/conf/zoo.cfg server.1=0.0.0.0:2888:3888 server.2=192.168.1.2:2888:3888 server.3=192.168.1.3:2888:3888
- خطوط زیر را به انتهای پروندهی zoo.cfg اضافه نمایید. (درون سرور دوم)
# vim /etc/zookeeper/conf/zoo.cfg server.1=192.168.1.1:2888:3888 server.2=0.0.0.0:2888:3888 server.3=192.168.1.3:2888:3888
- خطوط زیر را به انتهای پروندهی zoo.cfg اضافه نمایید. (درون سرور سوم)
# vim /etc/zookeeper/conf/zoo.cfg server.1=192.168.1.1:2888:3888 server.2=192.168.1.2:2888:3888 server.3=0.0.0.0:2888:3888
- دستور زیر را بر روی سرور اول اجرا نمایید.
# echo 1 > /var/lib/zookeeper/myid
- دستور زیر را بر روی سرور دوم اجرا نمایید.
# echo 2 > /var/lib/zookeeper/myid
- دستور زیر را بر روی سرور سوم اجرا نمایید.
# echo 3 > /var/lib/zookeeper/myid
- دستور زیر را بر روی هر ۳ سرور اجرا کنید.
# systemctl restart zookeeper
- دستور زیر را بر روی تمام سرورها اجرا نمایید.
# telnet localhost 2181 Trying ::1... Connected to localhost. Escape character is '^]'.
- حال دستور ruok را درون telnet اجرا نمایید. در صورتی که مشکلی وجود نداشته باشد، خروجیای مشابه زیر دریافت خواهید کرد.
imokConnection closed by foreign host.
نصب Kafka
- برای دریافت آخرین نسخه به وب سایت زیر مراجعه کنید.
https://kafka.apache.org/downloads
- پیشنهاد میشود نسخهی kafka_2.12-2.6.0.tgz دریافت شود. (Scala 2.12)
- بستهی بالا بر روی هر سه سرور اجرا شود.
- دستور زیر بر روی هر سه سرور اجرا شود.
# mkdir /opt/kafka
- دستور زیر بر روی هر سه سرور اجرا شود.
# tar -xvzf kafka_2.12-1.0.1.tgz --directory /opt/kafka --strip-components 1
- پروندهی server.properties بر روی هر سرور اول باز شود و تنظیمات زیر اعمال شود.
# vim /opt/kafka/config/server.properties broker.id=0 listeners=PLAINTEXT://192.168.1.1:9092 advertised.listeners=PLAINTEXT://192.168.1.1:9092 log.dirs=/var/lib/kafka/data zookeeper.connect=192.168.1.14:2181,192.168.1.2:2181,192.168.1.3:2181 delete.topic.enable=true message.max.bytes=100000000
- پروندهی server.properties بر روی هر سرور دوم باز شود و تنظیمات زیر اعمال شود.
# vim /opt/kafka/config/server.properties broker.id=1 listeners=PLAINTEXT://192.168.1.2:9092 advertised.listeners=PLAINTEXT://192.168.1.2:9092 log.dirs=/var/lib/kafka/data zookeeper.connect=192.168.1.14:2181,192.168.1.2:2181,192.168.1.3:2181 delete.topic.enable=true message.max.bytes=100000000
- پروندهی server.properties بر روی هر سرور سوم باز شود و تنظیمات زیر اعمال شود.
# vim /opt/kafka/config/server.properties broker.id=2 listeners=PLAINTEXT://192.168.1.3:9092 advertised.listeners=PLAINTEXT://192.168.1.3:9092 log.dirs=/var/lib/kafka/data zookeeper.connect=192.168.1.14:2181,192.168.1.2:2181,192.168.1.3:2181 delete.topic.enable=true message.max.bytes=100000000
- برای صحت عملکرد Kafka در هر سه سرور دستور زیر را اجرا کنید.
# bash /opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties
- در صورت وجود مشکل برنامه خطا داده و خارج میشود.
تنظیمات Systemd
- برای این که ابزار Kafka به صورت سرویس درون Systemd تعریف شود. پروندهی kafka.service را درون هر سه سرور ایجاد کرده و تنظیمات زیر را اعمال نمایید.
# vim /etc/systemd/system/kafka.service [unit] Requires=zookeeper.service After=zookeeper.service [Service] Type=simple User=root ExecStart=/bin/bash -c '/opt/kafka/bin/kafka-server-start.sh /opt/kafka/config/server.properties' ExecStop=/opt/kafka/bin/kafka-server-stop.sh Restart=on-abnormal [Install] WantedBy=multi-user.target
- دستور زیر را بر روی هر سه سرور اجرا کنید.
# systemctl enable zookeeper.service kafka.service # systemctl restart zookeeper.service kafka.service
آزمون اتصال سرورها
- مشاهدهی تمام Topicهای موجود
- برای این منظور :
# bash /opt/kafka/bin/kafka-topics.sh --list --zookeeper localhost:2181
- ساخت Topic :
- برای اطمینان از اتصال هر سه سرور به یکدیگر، دستور زیر را درون یکی از سرورها (مثلا سرور اول) وارد نمایید.
# bash /opt/kafka/bin/kafka-topics.sh --create --topic test-topic-1 --zookeeper 192.168.1.1:2181 --partitions 3 --replication-factor 3 Created topic test-topic-1
- در دستور بالا فرض بر این است که دستور بر روی سرور اول اجرا شده لذا آدرس 192.168.1.1 وارد شده است.
- در صورتی که دستور بالا با موفقیت اجرا شود، خروجی Created topic test-topic-1 نمایش داده میشود.
- مشاهدهی جزییات Topic :
- برای مشاهدهی جزییات تاپیک دستور زیر را روی یکی از سرورها اجرا کنید. (مثلا سرور دوم)
# bash /opt/kafka/bin/kafka-topics.sh --describe --topic test-topic-1 --zookeeper 192.168.1.2:2181 Topic: test-topic-1 PartitionCount: 3 ReplicationFactor: 3 Configs: Topic: test-topic-1 Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0 Topic: test-topic-1 Partition: 1 Leader: 0 Replicas: 0,2,1 Isr: 0,2,1 Topic: test-topic-1 Partition: 2 Leader: 1 Replicas: 1,0,2 Isr: 1,0,2
- ارسال پیام :
- برای ارسال پیام (تست) وارد یکی از سرورها شده و دستور زیر را اجرا کنید. (مثلا سرور سوم)
# bash /opt/kafka/bin/kafka-console-producer.sh --broker-list 192.168.1.3:9092 --topic test-topic-1 >test >line2 >bye
- کلمات test ، line2 ، bye به عنوان پیامی هستند که ارسال شده اند.
- به منظور ارسال پیام به صورت تصادفی (و در بازههای زمانی تصادفی) به صورت زیر عمل کنید.
for (( ;; )) ; do echo "$RANDOM" | bash /opt/kafka/bin/kafka-console-producer.sh --broker-list 192.168.1.3:9092 --topic test-topic-1 ; sleep $(shuf -i 1-9 -n 1) ; done
- مشاهدهی پیامها :
- برای مشاهدهی پیامها داخل یکی از سرورها رفته و دستور زیر را اجرا کنید. (مثلا سرور اول)
# bash /opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server 192.168.1.1:9092 --topic test-topic-1 --from-beginning line2 test bye
- آزمایش شده بر روی Ubuntu 16.04