در دهه گذشته، ماهیت نرمافزارها به شکل بنیادین تغییر کرده است. اپلیکیشنها دیگر سیستمهای کوچک با تعداد محدود رویداد نیستند؛ بلکه به سیستمهایی عظیم و توزیعشده تبدیل شدهاند که هر جزء آنها به صورت لحظهای داده تولید میکند:
در چنین فضایی، دیتا پیوسته جاری است — نه در قالب رکوردهای جداگانه، بلکه در قالب Stream.
سازمانهایی که بتوانند این داده را در لحظه دریافت، ذخیره، پردازش و منتقل کنند، میتوانند:
این مدل، architecture event-driven یا Real-Time Data Platform نام دارد.
و همینجا Kafka مرکزیت پیدا میکند.
Apache Kafka یک پلتفرم استریمینگ توزیعشده است که مانند یک «ستون فقرات داده» در سازمانها عمل میکند.
Kafka نه فقط یک Message Queue، بلکه یک Commit Log توزیعشده با سرعت بسیار بالا و امکان ذخیره بلندمدت رویدادهاست.
ویژگیهای اصلی Kafka:
به همین دلیل، بسیاری از شرکتها Kafka را بهعنوان پایه اصلی معماری داده خود انتخاب میکنند.
دلایل محبوبیت بینظیر Kafka در میان تیمهای مهندسی داده و معماری سیستمها:
کافکا رکوردشکن است؛ روی یک کلایستر کوچک هم میتوانید چند صد هزار تا چند میلیون پیام در ثانیه را مدیریت کنید.
کافکا با Replication و ISR موتور بسیار مقاومی دارد. حتی اگر نودها از دسترس خارج شوند، سیستم ادامه میدهد.
فقط نود اضافه کنید؛ همهچیز بدون تغییر در برنامهنویسی مقیاس میگیرد.
سرویسها بدون وابستگی مستقیم با هم صحبت میکنند. تولیدکننده پیام نیازی ندارد بداند مصرفکننده کیست و کجاست.
Kafka Streams، Connect، MirrorMaker، Schema Registry، Flink، Spark و دهها ابزار دیگر.
بهویژه زمانی که حجم پیامها زیاد، سرعت بالا و Replay پیامها ضروری باشد.
اگرچه RabbitMQ سالها بهعنوان یک Message Broker محبوب استفاده میشد، اما Kafka به دلیل نیازهای جدید دنیای داده بهسرعت جای آن را گرفت. مهمترین دلایل:
Kafka به دلیل استفاده از I/O sequential و zero-copy، عملکردی دارد که چندین برابر RabbitMQ است.
Kafka علاوه بر پیامرسانی:
Kafka در سال ۲۰۱۱ داخل LinkedIn ساخته شد. هدف اولیه: جمعآوری حجم عظیم رویدادهای کاربران و ارسال آن به سیستمهای مختلف.
مهمترین نقاط عطف:
نسخه ۴ از ZooKeeper کاملاً جدا شده است.
KRaft اکنون متادیتا، کنترلپلین و کل مدیریت کلاستر را برعهده دارد.
مزیتها:
نسخه ۴ امروز استاندارد جدید Kafka محسوب میشود.
در این بخش، Kafka را بدون ZooKeeper نصب میکنیم.
نسخه رسمی (Scala 2.13):
https://dlcdn.apache.org/kafka/4.0.0/kafka_2.13-4.0.0.tgz
java -version
tar xfvz kafka_2.13-4.0.0.tgz
cd kafka_2.13-4.0.0
bin/kafka-storage.sh format -t <UUID> -c config/server.properties --standalone
<UUID> را با دستور زیر میسازید:uuidgen
bin/kafka-server-start.sh config/server.properties
۱) نصب Java و تنظیم متغیر محیطی JAVA_HOME
۲) استخراج فایل:
tar -xvzf kafka_2.13-4.0.0.tgz
cd kafka_2.13-4.0.0
۳) فرمت کردن متادیتا:
bin\windows\kafka-storage.bat format -t <UUID> -c config\server.properties --standalone
۴) اجرای Kafka:
bin\windows\kafka-server-start.bat config\server.properties
مثال: ساخت تاپیک users با ۴ پارتیشن:
./bin/kafka-topics.sh --create --topic users --partitions 4 --replication-factor 1 --bootstrap-server localhost:9092
./bin/kafka-topics.sh --list --bootstrap-server localhost:9092
./bin/kafka-topics.sh --describe --topic users --bootstrap-server localhost:9092
./bin/kafka-console-producer.sh --bootstrap-server localhost:9092 --topic users --property key.separator=, --property parse.key=true
ورودی نمونه:
۱, ali
۲, ahmad
۳, sara
۱, ali2
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic users --from-beginning
برای مشاهده کلید و Timestamp:
./bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic users --from-beginning --property print.key=true --property print.value=true --property print.timestamp=true
kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic users
--bootstrap-server استفاده کنید