Apache Kafka- نصب و کانفیگ #
در این بخش به نحوه ی نصب کافکا پرداخته شده است. در ابتدا روشی که ساده است و به صورت مستقیم با استفاده از دانلود باینری پکیج کافکا بیان شده است که بیشتر در استفاده تمرینی و بر روی سیستم شخصی مناسبه (اگر داکر رو هنوز آموزش ندیدید با استفاده از این روش نصب کنید). در بخش دوم نصب به کمک داکر که برای عملیاتی سازی پروژه ها الزامی استفاده هست رو میبینیم. هر دو روش به نسبت به نظرم ساده است.
نحوه نصب و کانفیگ Apache Kafka بر روی ویندوز #
سیستم من ویندوز 10 است. در ادامه نصب کافکا را بر روی ویندوز آمده است. به طور کلی نصب کافکا بسیار ساده است و بر روی ویندوز یا لینوکس تنها از طریق دانلود و extract محتوای آن قابل استفاده میباشد ولی برای نگهداری طولانی مدت به نظر خودم استفاده از کافکا در صورت امکان به کمک داکر ساده تره نسبت به دانلود و بالا آوردن دستی چند سرور برای عملیاتی شدن پروژه. در ادامه نحوه ی نصب آن و سپس فولدرها و محتوای مهم آن آمده است.
پیش نیاز نصب کافکا #
برای نصب کافکا به موارد زیر نیاز است:
باینری پکیج کافکا
نصب جاوا( Java 8.0 به بالا)
نصب کافکا #
باینری پکیج کافکا را دانلود کرده و آن را extract کنید.مسیری که کافکا در آن extract میکنیم نباید دارای space باشد. برای مثال در Program File قرار نگیرد. به همین راحتی! الان کافکا رو میشه بالا آورد. منتها قبلش لازمه کانفیگش کرد. در ادامه ی نحوه ی کانفیگ آن برای شروع کافکا آمده است.
کانفیگ کافکا #
در فولدر kafka، چند زیرفولدر داریم. فولدر bin حاوی shell script های متفاوت برای انجام کارها است. در میان اینها 4 اسکریپت برای start و stop کافکا و ZooKeeper مهم هستند. شکل (1) این اسکریپتها را نشان میدهد. در صورتی که از سیستم عامل ویندوز استفاده میکنید، معادل این sh. فایلها، bat. فایل در فولدر windows در داخل فولدر bin، نیز وجود دارد که میتوان از آنها استفاده کرد.
فولدر libs تمامی dependency های کافکا را دارد که شامل ZooKeeper نیز میباشد.
فولدر config حاوی فایلهای مورد نیاز برای کانفیگ کافکا است. این فولدر دو فایل مهم server.properties و zookeeper.properties دارد که اولی برای تنظیمات broker ها و دومی تنظیمات ZooKeeper است. شکل(2) فایلهای پوشه ی کانفیگ را نشان میدهد.
برای start کافکا لازم است ابتدا دو متغیر ست شوند. یکی در فایل server.properties و دیگری در فایل zookeeper.properties است. چون کافکا پیغام ها را به صورت file نگهداری میکند(در بخش های دیگه این مورد اومده)، آدرس فولدر نگهداری این پیغام ها در فایل server.properties متغیر log-dirs تنظیم میشود. بنابراین یک فولدر برای محل نگهداری پیغام های ساخته شود و آدرس آن در این فیلد ست شود.(میتونین از آدرس دهی کامل یا نسبی استفاده کنین.)
مثلا خودم در فولدر اصلی کافکا یک فولدر به اسم logs ساختم که داخل اون دو تا فولدر دیگه یکی برای محل پیغام های کافکا و یکی برای zookeeper ساختم و به صورت آدرس دهی نسبی اون رو آدرس دادم. (اگر نمیدونین چرا لازمه مشکلی نداره، تو پست های بعدی این ها رو توضیح میدم.)
این فیلد در شکل 3 نشان داده شده است. نکته ای که اینجا هستش کافکا بر روی ویندوز از backslash خوشش نمیاد! از slash استفاده کنین برای مقدار دهی ها. من اینجا از آدرس دهی نسبی استفاده کردم.
همچنین آدرسی برای نگهداری لاگ های zookeeper نیز لازم است ست شود. که برای آن نیز لازم است فولدری مجزا ایجاد شود و آدرس آن در dataDir فایل zookeeper.properties مقدار دهی شود. شکل 4 این متغیر را نشان میدهد.
سپس با اجرای zookeeper-server-start.bat ابتدا zookeeper را start کرده و سپس با اجرای kafka-server-start.bat کافکا را start میکنیم. شکل 5 و 6 شروع کافکا را نشان میدهد. برای اجرای هر کدام از اسکریپتهای start به عنوان ورودی نام و آدرس property فایل آن ( به ترتیب آدرس zookeeper.properties و server.properties) را مینویسیم. برای آدرس دهی میتوان از آدرس دهی نسبی نیز استفاده کرد.
به همین سادگی کافکا اجرا میشود! کافکا به صورت دیفالت بر روی پورت 9092 بالا می آید.
من اولین باری که kafka را بر روی ویندوز اجرا کردم خطایی گرفتم که میگفت ورودی بسیار بزرگ است! علت این خطا ناشی از محدودیت length در cmd است زیرا در فایل kafka-run- class.bat تعدادی concat به CLASSPATH انجام میدهد که برای رفع آن لازم بود خط زیر در فایل kafka-run- class.bat
rem Classpath addition for release
for %%i in ("%BASE_DIR%\libs\*") do (
call :concat "%%i"
)
با خط زیر جابجا شود:
rem Classpath addition for release
call :concat "%BASE_DIR%\libs\*;"
نحوه نصب و کانفیگ Apache Kafka با استفاده از docker #
من از قبل داکر رو روی سیستمم که ویندوزی هست نصب کرده بودم. فرض کنیم طرز کار داکر رو همه مون تا حدودی میدونیم بنابراین برای نصب کافکا با کمک داکر، ابتدا به image هاش نیاز داریم. برای نصب کافکا دو ایمیج zookeeper و kafka رو نیاز داریم. به نظرم همواره Image های رسمی خود شرکت ها دانلود بشن بهتر هست. بنابراین برای Zookeeper ایمیج اصلی اون به همین نام که تا لحظه نوشتن این متن 100M دانلود داشته رو استفاده میکنیم. نحوه دانلود همونطور که خودتون بهتر میدونین با استفاده از دستور زیر در cmd انجام میشه.(داکر رو لاگین کرده باشین و vpn روشن بشه)
docker pull zookeeper
در زمان نوشتن این متن آخرین نسخه ی zookeeper که در دسترسه ورژن 3.5.6 هست که من برای نصب چون ورژن تعیین نکردم همین ورژن دانلود شده. برای اجرا هم فعلا همه چیز به صورت دیفالت استفاده میکنیم، در پست های بعدی نحوه تغییر این مقادیر دیفالت رو با هم بررسی میکنیم. بالا آوردنش ساده است و نیاز هست zookeeper به صورت یک سرویس در فایل docker-compose تعریف بشه. (در اینجا تنها 1 zookeeper بالا آوردم و فعلا قصد کلاستر کردن رو ندارم و این مبحث در پست های آینده مفصل توضیح داده میشه)
در zookeeper پورت دیفالت 2181 هستش که ما هم همین رو فعلا استفاده میکنیم و تغییری در اون نمیدیم. همچنین لازمه یه فولدر رو برای اینکه log هاش (در بخش های دیگه با جزییات اشاره میشه کاربردش چی هست رو هم مقدار میدیم). من در اینجا یه آدرس از سیستمم (D:\Projects\Hazard\hazard-detection\data_log) رو براش ست کردم. در بخش environment هم آدرس سرور zookeeper رو میذاریم، من در اینجا localhost رو ست کردم به آدرس 0.0.0.0.
zoo1:
image: zookeeper
hostname: zoo1
volumes:
- D:\Projects\Hazard\hazard-detection\data_log:/data-log
ports:
- 2181:2181
environment:
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181
برای image کافکا از wurstmeister/kafka:2.13-2.6.0 که در زمان نوشتن این نسخه ورژن آخر بود استفاده شده. مثل مرحله قبل اول pull میکنیم. kafka چون به zookeeper وابسته است لازمه بعدش بالا بیاد بنابراین depends_on zoo1 رو اضافه میکنیم. اینجا هم از پورت دیفالت که 9092 هست استفاده میکنیم و به بیرون expose اش میکنیم. آدرس zookeeper چون اینها خارج از محیط داخلی داکر با هم پیام رد و بدل میکنن به آدرس IP سیستم ست میکنیم که در اینجا IP سیستمم 192.168.160.93 هستش و در بالا هم دیدیم zookeeper بر روی پورت 2181 بالا می آید و نحوه انتقال پیام ها که به صورت PLAINTEXT باشه رو در بخش environment اش ست میکنیم. همچنین لازمه آدرس سروری که کلاینت ها از طریق اون به کافکا متصل میشن و کافکا روی اون بالا اومده رو در بخش KAFKA_ADVERTISED_LISTENERS قرار میدهیم که من آدرس سیستم خودم رو قرار دادم.
kafka1:
image: wurstmeister/kafka:2.13-2.6.0
depends_on:
- zoo1
ports:
- 9092:9092
environment:
- KAFKA_ZOOKEEPER_CONNECT=192.168.160.93:2181
- KAFKA_LISTENERS=PLAINTEXT://:9092
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.160.93:9092
با دستور docker compose up کافکا و zookeeper بالا میان و همدیگه رو میشناسن! کل فایل docker-compose.yml در ادامه آوردم.
version: quot3.6"
services:
zoo1:
image: zookeeper
hostname: zoo1
volumes:
- D:\Projects\Hazard\hazard-detection\data_log:/data-log
ports:
- 2181:2181
environment:
ZOO_SERVERS: server.1=0.0.0.0:2888:3888;2181
kafka1:
image: wurstmeister/kafka:2.13-2.6.0
depends_on:
- zoo1
ports:
- 9092:9092
environment:
- KAFKA_ZOOKEEPER_CONNECT=192.168.160.93:2181
- KAFKA_LISTENERS=PLAINTEXT://:9092
- KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.160.93:9092
در این نوشتار، نصب و کانفیگ کافکا به دو روش بیان شد. کافکا بر روی ویندوز تنها از طریق دانلود و extract محتوای آن قابل استفاده است، نیاز به نصب خاصی ندارد. کانفیگ آن نیز تنها با مقدار دهی دو متغیر آن انجام پذیر است و بسیار راحت اجرا می شود. با استفاده از داکر نیز در صورتی که مختصری با داکر آشنایی داشته باشین به راحتی قابل اجرا است.
از اینکه وقتتون رو در اختیارم قرار دادید و متن رو خوندید ممنونم، اگر سوالی یا پیشنهادی داشتین خوشحال میشم برام کامنت بذارید.
برای مطالب این نوشتار از درس های Getting Started with Apache Kafka و Designing Event-driven Applications Using Apache Kafka Ecosystem از pluralsight استفاده شده است.