স্পার্ক স্ট্রাকচার্ড স্ট্রিমিং + কাফকার উপর একটি দ্রুত নজর

স্ট্রীম-প্রসেসিং কাজগুলির জন্য এই শক্তিশালী ডুওটি কীভাবে ব্যবহার করবেন তার মূল বিষয়গুলি শিখুন

দ্বারা ফোটো নিখিতা সিংহল on Unsplash

সম্প্রতি আমি Apache Kafka এবং Apache Spark সম্পর্কে অনেক অধ্যয়ন শুরু করেছি, ডেটা ইঞ্জিনিয়ারিং জগতের দুটি প্রধান প্রযুক্তি।

আমি গত কয়েক মাসে তাদের ব্যবহার করে বেশ কয়েকটি প্রকল্প তৈরি করেছি; "Kafka, Debezium, এবং BentoML এর সাথে মেশিন লার্নিং স্ট্রিমিং"একটি উদাহরণ। আমার ফোকাস হল এই আধুনিক বিখ্যাত সরঞ্জামগুলির সাহায্যে কীভাবে শক্তিশালী ডেটা পাইপলাইন তৈরি করা যায় এবং তাদের সুবিধা এবং অসুবিধাগুলি সম্পর্কে ধারণা পাওয়া যায়।

গত মাসগুলিতে, আমি ইতিমধ্যেই কভার করেছি যে কীভাবে উভয় সরঞ্জাম ব্যবহার করে ETL পাইপলাইন তৈরি করা যায় তবে কখনই সেগুলি একসাথে ব্যবহার করিনি, এবং এটিই আজ আমি পূরণ করব।

আমাদের লক্ষ্য হল Spark+Kafka-এর সাহায্যে একটি স্ট্রিমিং অ্যাপ্লিকেশন তৈরির পিছনে সাধারণ ধারণা শেখা এবং বাস্তব ডেটা ব্যবহার করে এর মূল ধারণাগুলিকে দ্রুত দেখা।

ধারণাটি সহজ — অ্যাপাচি কাফকা একটি বার্তা স্ট্রিমিং টুল, যেখানে প্রযোজকরা একটি সারির এক প্রান্তে বার্তা লেখেন (যাকে বলা হয় বিষয়) অন্য দিকে ভোক্তাদের দ্বারা পড়তে হবে।

কিন্তু এটি একটি অত্যন্ত জটিল টুল, যা একটি স্থিতিস্থাপক বিতরণ করা মেসেজিং পরিষেবা হিসাবে তৈরি করা হয়েছে, সমস্ত ধরণের ডেলিভারি গ্যারান্টি সহ (ঠিক একবার, একবার, যেকোনো), বার্তা সঞ্চয়স্থান, এবং বার্তার প্রতিলিপি, পাশাপাশি নমনীয়তা, মাপযোগ্যতা এবং উচ্চ থ্রুপুটকে অনুমতি দেয়। এটিতে মাইক্রোসার্ভিসেস কমিউনিকেশন, রিয়েল-টাইম ইভেন্ট সিস্টেম এবং স্ট্রিমিং ইটিএল পাইপলাইনের মতো ব্যবহারের ক্ষেত্রে একটি বিস্তৃত সেট রয়েছে।

Apache Spark একটি বিতরণ করা মেমরি-ভিত্তিক ডেটা ট্রান্সফরমেশন ইঞ্জিন।

এটি একটি খুব জটিল টুল, যা সব ধরণের ডাটাবেস, ফাইল সিস্টেম এবং ক্লাউড অবকাঠামোর সাথে সংযোগ করতে সক্ষম। এটি মেশিনগুলির মধ্যে প্রক্রিয়াকরণকে সমান্তরাল করার জন্য বিতরণ করা পরিবেশে কাজ করার জন্য প্রস্তুত, এর অলস মূল্যায়ন দর্শন এবং ক্যোয়ারী অপ্টিমাইজেশন ব্যবহার করে উচ্চ-কার্যক্ষমতার রূপান্তরগুলি অর্জন করে৷

এটি সম্পর্কে দুর্দান্ত অংশ হল যে, দিনের শেষে, কোডটি শুধুমাত্র আপনার স্বাভাবিক এসকিউএল কোয়েরি বা (প্রায়) আপনার পাইথন+পান্ডাস স্ক্রিপ্ট, একটি চমৎকার ব্যবহারকারী-বান্ধব উচ্চ-স্তরের API-এর অধীনে সমস্ত জাদুবিদ্যা বিমূর্ত করা।

এই দুটি প্রযুক্তির সাথে যোগ দিন এবং একটি স্ট্রিমিং ETL পাইপলাইন তৈরি করার জন্য আমাদের একটি নিখুঁত মিল রয়েছে।

আমরা মিনাস গেরাইসের (ব্রাজিল) রাজধানী বেলো হরিজন্টে (বিএইচ) শহরের ট্রাফিক সেন্সর থেকে ডেটা ব্যবহার করব। এটি একটি বিশাল ডেটাসেট যা শহরের বিভিন্ন স্থানে ট্রাফিক প্রবাহের পরিমাপ রয়েছে৷ প্রতিটি সেন্সর পর্যায়ক্রমে সেই অবস্থানে গাড়ি চালানোর ধরন সনাক্ত করে (গাড়ি, মোটরসাইকেল, বাস/ট্রাক), এর গতি এবং দৈর্ঘ্য (এবং অন্যান্য তথ্য যা আমরা ব্যবহার করতে যাচ্ছি না)।

এই ডেটাসেটটি স্ট্রিমিং সিস্টেমের ক্লাসিক্যাল অ্যাপ্লিকেশানগুলির মধ্যে একটিকে সঠিকভাবে উপস্থাপন করে — সেন্সরগুলির একটি গ্রুপ ক্ষেত্র থেকে ক্রমাগত তাদের রিডিং পাঠায়।

এই পরিস্থিতিতে, Apache Kafka সেন্সর এবং তাদের ডেটা ব্যবহার করে এমন অ্যাপ্লিকেশনগুলির মধ্যে একটি বিমূর্ত স্তর হিসাবে ব্যবহার করা যেতে পারে।

কাফকা উৎস এবং পরিষেবার মধ্যে একটি বিমূর্ত স্তর হিসাবে ব্যবহৃত হয়। লেখক দ্বারা ছবি.

এই ধরনের অবকাঠামো দিয়ে, সব ধরনের (তথাকথিত) নির্মাণ করা সম্ভব রিয়েল-টাইম ইভেন্ট-চালিত সিস্টেম, ট্র্যাফিক জ্যামের জন্য সনাক্তকরণ এবং সতর্ক করার একটি প্রোগ্রামের মতো যখন গাড়ির সংখ্যা হঠাৎ করে গড় গতি হ্রাসের সাথে বৃদ্ধি পায়।

এবং সেখানেই অ্যাপাচি স্পার্ক খেলায় আসে।

এটিতে স্ট্রিম প্রসেসিংয়ের জন্য একটি নেটিভ মডিউল রয়েছে যাকে বলা হয় স্পার্ক স্ট্রাকচার্ড স্ট্রিমিং, যা কাফকার সাথে সংযোগ করতে পারে এবং এর বার্তাগুলি প্রক্রিয়া করতে পারে।

পরিবেশ স্থাপন করা

আপনার যা দরকার তা হল ডকার এবং ডকার-কম্পোজ।

আমরা নিম্নলিখিত সংগ্রহস্থলগুলির উপর ভিত্তি করে একটি ডকার-কম্পোজ ফাইল কনফিগারেশন ব্যবহার করব: লিঙ্ক স্পার্ক, লিঙ্ক কাফকা.

সার্জারির ./src ভলিউম হল যেখানে আমরা আমাদের স্ক্রিপ্ট রাখব।

পরিবেশ শুরু করতে, শুধু চালান

ডকার-আপ রচনা

এতে সব কোড পাওয়া যায় GitHub সংগ্রহস্থল.

স্পার্ক অধ্যয়ন শুরু করার সময় আমার সবচেয়ে পছন্দের জিনিসগুলির মধ্যে একটি হল এটির জন্য লিখিত কোড এবং আমার সাধারণ পাইথন + পান্ডাস স্ক্রিপ্টের মধ্যে মিল। এটা মাইগ্রেট করা খুব সহজ ছিল.

একই যুক্তি অনুসরণ করে, স্পার্কের স্ট্রিমিং মডিউলটি সাধারণ স্পার্ক কোডের মতোই, যা ব্যাচ অ্যাপ্লিকেশনগুলি থেকে স্ট্রিমগুলিতে স্থানান্তরিত করা সহজ করে তোলে।

এটি বলার সাথে সাথে, নিম্নলিখিত বিভাগে, আমরা স্পার্ক স্ট্রাকচার্ড স্ট্রিমিং এর বিশেষত্ব শেখার উপর ফোকাস করব, অর্থাত্, এতে কী নতুন বৈশিষ্ট্য রয়েছে।

আমাদের প্রথম কাজ

আসুন ধীরে শুরু করি এবং একটি খেলনা উদাহরণ তৈরি করি

প্রথম কাজটি হল একটি কাফকা বিষয় তৈরি করা যেখান থেকে আমাদের স্পার্ক কাজ বার্তাগুলিকে গ্রাস করবে।

এটি দ্বারা করা হয় কাফকা কন্টেইনার টার্মিনাল অ্যাক্সেস করা এবং কার্যকর করা:

kafka-topics.sh --create --bootstrap-server localhost:9092 --topic test_topic

এই বিষয়ে একটি প্রযোজক লেখা বার্তা অনুকরণ করতে, আসুন ব্যবহার করা যাক কাফকা-কনসোল-প্রযোজক। এছাড়াও পাত্রের ভিতরে:

kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test_topic --property "parse.key=true" --property "key.separator=:"

এখন থেকে, টার্মিনালে টাইপ করা প্রতিটি লাইন পরীক্ষার বিষয়ে একটি বার্তা হিসাবে পাঠানো হবে। ":" অক্ষরটি বার্তার কী এবং মান (কী: মান) আলাদা করতে ব্যবহৃত হয়।

আসুন এই বিষয়টিকে গ্রাস করার জন্য একটি স্পার্ক কাজ তৈরি করি।

কোড ভিতরে রাখা প্রয়োজন /src/স্ট্রিমিং ফোল্ডার (বিশেষ কিছু নয়, আমি যে ফোল্ডারটি বেছে নিয়েছি)।

লক্ষ্য করার মূল বিষয় হল যে আমরা বৈশিষ্ট্যগুলি ব্যবহার করছি রিডস্ট্রিম এবং স্ট্রিম লিখুন, স্বাভাবিক পড়া এবং লেখার পরিবর্তে। এটি হল প্রধান দিক যা স্পার্ককে আমাদের কাজকে একটি স্ট্রিমিং অ্যাপ্লিকেশন হিসাবে বিবেচনা করে।

কাফকার সাথে সংযোগ করতে, সার্ভার এবং বিষয় উল্লেখ করা প্রয়োজন। ইচ্ছা স্টার্টিংঅফসেট=“earliest” স্পার্ককে প্রথম থেকে বিষয়টি পড়তে বলে। এছাড়াও, কারণ কাফকা তার বার্তাগুলি সংরক্ষণ করে বাইনারি ফর্ম, তারা ডিকোড করা প্রয়োজন স্ট্রিং.

অন্যান্য বিকল্পগুলি আরও অন্বেষণ করা হবে।

এখন, স্পার্ক কন্টেইনারে প্রবেশ করি এবং কাজটি চালাই।

spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.3.0 /src/streaming/read_test_stream.py

কনফিগারেশনের কয়েক সেকেন্ড পরে, এটি টপিকটি গ্রাস করতে শুরু করবে।

কাফকার কাছ থেকে স্পার্ক গ্রাসকারী বার্তা। লেখক দ্বারা ছবি.

স্পার্ক স্ট্রিমিং কাজ করে মাইক্রো-ব্যাচিং মোড, এবং সেই কারণেই আমরা "ব্যাচ" তথ্য দেখতে পাই যখন এটি বার্তাগুলি গ্রাস করে।

মাইক্রো-ব্যাচিং কিছুটা সম্পূর্ণ "ট্রু" স্ট্রিমিংয়ের মধ্যে, যেখানে সমস্ত বার্তাগুলি আসার সাথে সাথে পৃথকভাবে প্রক্রিয়া করা হয় এবং সাধারণ ব্যাচ, যেখানে ডেটা স্থির থাকে এবং চাহিদা অনুযায়ী ব্যবহার করা হয়। স্পার্ক কিছু সময় অপেক্ষা করবে বার্তাগুলিকে একসাথে প্রক্রিয়া করার জন্য জমা করার চেষ্টা করে, ওভারহেড হ্রাস করবে এবং লেটেন্সি বাড়াবে। এটি আপনার প্রয়োজনে টিউন করা যেতে পারে।

আমি খুব দ্রুত টাইপার নই, তাই বর্তমান ব্যাচে নতুনদের অন্তর্ভুক্ত করার আগে স্পার্ক বার্তাটি প্রক্রিয়া করে।

এবং যে আমাদের প্রথম স্ট্রিমিং কাজ ছিল!

আমি আশা করি আপনি অনুভূতি পাবেন: একটি স্ট্রীম প্রসেসিং কাজের কোড করা কঠিন নয়, তবে কিছু গোটচা আছে।

একটি কাফকা প্রবাহে ডেটা লেখা

এখন সেন্সর ডেটা নিয়ে খেলা শুরু করার সময়।

আপনি ডাউনলোড করতে পারেন ফ্যাস্ শব্দ আগস্ট 2022 থেকে ফাইল করুন এবং এটিতে এক্সট্রাক্ট করুন / তথ্য আয়তন ডেটা মূলত JSON-এ থাকে এবং প্রায় 23Gb জায়গা নেয়। ডিস্ক স্পেস এবং পড়ার সময় অপ্টিমাইজ করার জন্য এটিকে parquet এ রূপান্তর করতে প্রথম জিনিস।

এটি করার জন্য স্পার্ক কাজগুলি GitHub সংগ্রহস্থলে বিশদ বিবরণ রয়েছে, আপনাকে যা করতে হবে তা হল সেগুলি চালানো:

স্পার্ক-সাবমিট /src/transform_json_to_parquet.pyস্পার্ক-সাবমিট /src/join_parquet_files.py

আপনার মেশিনের উপর নির্ভর করে, কার্যকর করতে কিছু সময় লাগতে পারে। কিন্তু এটি অর্থপ্রদান করে, চূড়ান্ত কাঠের ফাইলের আকার হল ~1Gb (20x এর বেশি ছোট) এবং পড়তে অনেক দ্রুত৷

আমাদের বার্তাগুলি পেতে আমাদের কাফকা বিষয়ও তৈরি করতে হবে:

kafka-topics.sh --create --replication-factor 1 --bootstrap-server localhost:9092 --topic traffic_sensor

ঐচ্ছিকভাবে, আপনি যদি আগত বার্তাগুলি প্রদর্শন করতে চান তবে কনসোল গ্রাহক সেট আপ করা সম্ভব।

kafka-console-consumer.sh --topic traffic_sensor --bootstrap-server localhost:9092

একটি কাফকা বিষয়ে তথ্য লেখা সহজ, কিন্তু কিছু বিবরণ আছে।

কাঠামোগত স্ট্রিমিং-এ, ডিফল্ট আচরণ হল ডেটা স্কিমা (কলাম এবং তাদের প্রকার) অনুমান করার চেষ্টা না করা, তাই আমাদের একটি পাস করতে হবে।

কাফকা বার্তাগুলি কেবল কী-মানের বাইনারি স্ট্রিং জোড়া, তাই আমাদের এই বিন্যাসে আমাদের ডেটা উপস্থাপন করতে হবে। সমস্ত সারিগুলিকে JSON স্ট্রিংগুলিতে রূপান্তর করে, বাইনারিতে এনকোড করে এবং ফলাফলটিকে "মান" কলামে সংরক্ষণ করে এটি সহজেই অর্জন করা যেতে পারে।

কলামগুলিকে JSON স্ট্রিংগুলিতে রূপান্তর করা হচ্ছে। লেখক দ্বারা ছবি.

কাফকাতে মেসেজ কী খুবই গুরুত্বপূর্ণ, কিন্তু সেগুলি আমাদের পরীক্ষায় কাজে আসবে না, তাই সব মেসেজ একই থাকবে।

আগেই উল্লেখ করা হয়েছে, এই ডেটাসেটটি বিশাল, তাই আমি সন্নিবেশিত বার্তার সংখ্যা 500,000-এ সীমাবদ্ধ করেছি।

অবশেষে, আমরা কাফকা সার্ভার এবং বিষয় পাস করি এবং একটি "চেকপয়েন্ট অবস্থান” যেখানে স্পার্ক মৃত্যুদন্ডের অগ্রগতি সঞ্চয় করবে, ত্রুটিগুলি থেকে পুনরুদ্ধারের জন্য দরকারী।

কাজ সম্পাদন:

spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.3.0 /src/streaming/insert_traffic_topic.py
কাফকার মধ্যে তথ্য সন্নিবেশ করান। লেখক দ্বারা ছবি.

বাম দিকে, স্পার্ক জব ফাইলটি পড়ে, ডানদিকে, ক কাফকা-কনসোল-ভোক্তা আগত বার্তা প্রদর্শন করে।

আমাদের ট্রাফিক বিষয় জনবহুল এবং প্রক্রিয়া করার জন্য প্রায় প্রস্তুত.

এটা মনে রাখা গুরুত্বপূর্ণ যে আমরা শুধুমাত্র শেখার উদ্দেশ্যে আমাদের টপিককে পপুলেট করার জন্য একটি স্পার্ক কাজ ব্যবহার করেছি। একটি বাস্তব পরিস্থিতিতে, সেন্সর নিজেই কাফকাকে সরাসরি পাঠ পাঠাবে।

এই গতিশীল আচরণটি অনুকরণ করতে, নীচের স্ক্রিপ্টটি প্রতি 1 সেকেন্ডে বিষয়টিতে 2.5 সারি লেখে।

আউটপুট মোড - প্রকার অনুসারে গাড়ির সংখ্যা গণনা করা

চলুন, চলুন টাইপ অনুসারে গাড়ির সংখ্যা গণনা করার জন্য একটি কাজ তৈরি করি।

"Classificação" (শ্রেণীবিন্যাস) কলামে শনাক্ত করা গাড়ির ধরন রয়েছে।

যেহেতু আমরা বিষয় থেকে পড়ছি, আমাদের JSON বাইনারি স্ট্রিংগুলিকে আবার কলামার বিন্যাসে রূপান্তর করতে হবে।

একবার এটি হয়ে গেলে, ক্যোয়ারীটি স্বাভাবিক হিসাবে তৈরি করা যেতে পারে। এটা ক্যোয়ারী হৃদয় শুধু যে নোট করা আকর্ষণীয় নির্বাচন করা()।গ্রুপ দ্বারা()।গণনা() ক্রম, বাকি সব স্ট্রিমিং লজিকের সাথে আপেক্ষিক।

তাই এটা সম্বোধন করার সময় আউটপুট মোড() বিকল্প।

একটি স্ট্রিম অ্যাপ্লিকেশনের আউটপুট মোড নির্দিষ্ট করে কিভাবে আমরা নতুন ডেটা আসার সাথে সাথে ফলাফলগুলিকে (পুনরায়) গণনা করতে এবং লিখতে চাই।

এটি তিনটি ভিন্ন মান অনুমান করতে পারে:

  • সংযোজন: শুধুমাত্র আউটপুটে নতুন রেকর্ড যোগ করুন।
  • সম্পূর্ণ: প্রতিটি নতুন রেকর্ডের জন্য সম্পূর্ণ ফলাফল পুনরায় গণনা করুন।
  • আপডেট: পরিবর্তিত রেকর্ড আপডেট করুন.

লিখিত অ্যাপ্লিকেশনের উপর নির্ভর করে এই মোডগুলি অর্থবোধ করতে পারে বা করতে পারে না। উদাহরণস্বরূপ, কোনো গ্রুপিং বা বাছাই করা হলে "সম্পূর্ণ" মোডের অর্থ নাও হতে পারে।

আসুন "সম্পূর্ণ" মোডে কাজটি নির্বাহ করি এবং ফলাফলগুলি দেখি।

spark-submit --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.3.0 /src/streaming/group_by_vehicle_type.py
ক্যামিনহাও — ট্রাক, অটোমোভেল-কার, ইনডেফিনিডো-অনির্ধারিত, অনিবাস-বাস, মোটো-মোটোসাইকেল। লেখক দ্বারা ছবি.

যেহেতু নতুন রেকর্ড স্ট্রীমে ঢোকানো হয় (ডানদিকে টার্মিনাল দেখুন), কাজটি সম্পূর্ণ ফলাফল পুনরায় গণনা করে। এটি এমন পরিস্থিতিতে উপযোগী হতে পারে যেখানে সারি ক্রম গুরুত্বপূর্ণ, যেমন র‍্যাঙ্কিং বা প্রতিযোগিতা।

যাইহোক, এই পদ্ধতিটি সর্বোত্তম নাও হতে পারে যদি গোষ্ঠীর সংখ্যা খুব বেশি হয় বা পৃথক পরিবর্তন সামগ্রিক ফলাফলকে প্রভাবিত না করে।

সুতরাং, আরেকটি বিকল্প হল "আপডেট" আউটপুট মোড ব্যবহার করা, যা শুধুমাত্র পরিবর্তিত গ্রুপগুলির জন্য একটি নতুন বার্তা তৈরি করে। নিচে দেখ:

আউটপুট মোড "আপডেট" সহ ক্যোয়ারী। লেখক দ্বারা ছবি.

"সংযোজন" মোডটি গ্রুপিংয়ের সাথে প্রশ্নের জন্য উপলব্ধ নয়, তাই আমি একই কাজ ব্যবহার করে দেখাতে সক্ষম হব না। কিন্তু আমি মনে করি যে এটা সহজ মোড, এটা সর্বদা আউটপুটে একটি নতুন রেকর্ড যোগ করে।

আপনি যদি ফলাফলগুলিকে একটি টেবিলে সংরক্ষণ করার কথা ভাবেন তবে এই আউটপুট মোডগুলি বোঝা সহজ। সম্পূর্ণ আউটপুট মোডে, আপডেট মোডে, প্রক্রিয়া করা প্রতিটি নতুন বার্তার জন্য টেবিলটি পুনরায় লেখা হবে, শুধুমাত্র সেই লাইনগুলি যেখানে কিছু আপডেট হয়েছে এবং পরিশিষ্ট সর্বদা শেষে একটি নতুন লাইন যুক্ত করবে।

টাম্বলিং টাইম উইন্ডো — সময়ের ব্যবধান ব্যবহার করে একত্রিত করা

স্ট্রিমিং সিস্টেমে, বার্তাগুলির সাথে সম্পর্কিত দুটি ভিন্ন টাইমস্ট্যাম্প থাকে: ইভেন্টের সময় — যে সময় বার্তাটি তৈরি করা হয়েছিল, আমাদের ক্ষেত্রে সেন্সরের পড়ার সময় এবং প্রক্রিয়াকরণের সময় — যখন প্রক্রিয়াকরণ এজেন্ট বার্তাটি পড়ে, আমাদের ক্ষেত্রে যখন এটি স্পার্ক পর্যন্ত পৌঁছেছে।

স্ট্রিম প্রক্রিয়াকরণ সরঞ্জামগুলির একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হল ইভেন্ট সময় প্রক্রিয়াকরণ পরিচালনা করার ক্ষমতা। টাম্বলিং উইন্ডোগুলি হল নন-ওভারল্যাপিং নির্দিষ্ট সময়ের ব্যবধান যা ইভেন্ট-টাইম কলাম ব্যবহার করে একত্রিত করতে ব্যবহৃত হয়। আরও সহজভাবে বলতে গেলে, তারা টাইমলাইনটিকে সমান আকারের স্লাইসে স্লাইস করে যাতে প্রতিটি ইভেন্ট একটি একক ব্যবধানের অন্তর্গত হয়।

উদাহরণস্বরূপ, গণনা করুন, প্রতি 5 মিনিটে, গত 5 মিনিটে কতগুলি গাড়ি সনাক্ত করা হয়েছিল।

5মিনিটের জানালা। লেখক দ্বারা ছবি.

নীচের কোড এটি ব্যাখ্যা করে:

এই ধরনের প্রক্রিয়াকরণ অনেক পরিস্থিতিতে অত্যন্ত কার্যকর হতে পারে। আগে প্রস্তাবিত ট্র্যাফিক জ্যাম ডিটেক্টরে ফিরে যাওয়া, একটি সম্ভাব্য পদ্ধতি হল 10 মিনিটের উইন্ডোতে যানবাহনের গড় গতি পরিমাপ করা এবং এটি একটি নির্দিষ্ট থ্রেশহোল্ডের নিচে আছে কিনা তা দেখা।

ইভেন্ট-টাইম প্রক্রিয়াকরণ একটি জটিল বিষয়। এটি মোকাবেলা করার সময় সবকিছু ঘটতে পারে, যেমন বার্তাগুলি হারিয়ে যাওয়া, খুব দেরিতে পৌঁছানো বা শৃঙ্খলার বাইরে হয়ে যাওয়া। সমস্যাগুলি প্রশমিত করার চেষ্টা করার জন্য স্পার্কের বেশ কয়েকটি প্রক্রিয়া রয়েছে, যেমন ওয়াটারমার্ক, যে আমরা ফোকাস করব না.

টাইম উইন্ডোতে অন্যান্য কলামের সাথে একত্রে ব্যবহার করা যেতে পারে গ্রুপ দ্বারা(). নীচের উদাহরণটি 5 মিনিটের উইন্ডোতে টাইপ অনুসারে গাড়ির সংখ্যা গণনা করে৷

স্লাইডিং টাইম উইন্ডো — সময়ের ব্যবধানে নমনীয়করণ

স্লাইডিং টাইম উইন্ডোগুলি হল টাম্বলিং উইন্ডোগুলির একটি নমনীয়করণ। অ-ওভারল্যাপিং ব্যবধান তৈরি করার পরিবর্তে, তারা প্রতিটি ব্যবধান কত ঘন ঘন তৈরি হবে তা নির্ধারণ করার অনুমতি দেয়।

উদাহরণস্বরূপ, প্রতি 5 মিনিটে, শেষ 30 মিনিটে কতগুলি যানবাহন সনাক্ত করা হয়েছে তা গণনা করুন।

সেই কারণে, ঘটনাগুলি অনেক ব্যবধানের অন্তর্গত হতে পারে এবং যতবার প্রয়োজন ততবার গণনা করা যেতে পারে।

একটি স্লাইডিং উইন্ডো সংজ্ঞায়িত করতে, শুধু আপডেট ব্যবধানটি পাস করুন জানলা() ফাংশন।

চলুন আউটপুট দেখি।

আমরা দেখতে পাচ্ছি, প্রতি 30 মিনিটে 5 মিনিটের উইন্ডোজ তৈরি হচ্ছে।

এই নমনীয়তা আরও নির্দিষ্ট ব্যবসার নিয়ম এবং আরও জটিল ট্রিগার সংজ্ঞায়িত করতে বেশ কার্যকর হতে পারে। উদাহরণস্বরূপ, আমাদের ট্র্যাফিক জ্যাম ডিটেক্টর গত 5 মিনিটে প্রতি 10 সেকেন্ডে প্রতিক্রিয়া পাঠাতে পারে এবং গাড়ির গড় গতি 20 কিমি/ঘন্টার নিচে নেমে গেলে একটি সতর্কতা তৈরি করতে পারে।

এটি ছিল স্পার্ক স্ট্রাকচার্ড স্ট্রিমিং-এর প্রধান ধারণা এবং কাফকার সাথে কীভাবে প্রয়োগ করা যেতে পারে তার একটি দ্রুত চেহারা।

Apache Kafka এবং Apache Spark উভয়ই নির্ভরযোগ্য এবং শক্তিশালী সরঞ্জাম যা অনেক কোম্পানি দ্বারা প্রতিদিন অবিশ্বাস্য পরিমাণে ডেটা প্রক্রিয়া করার জন্য ব্যবহৃত হয়, যা তাদের স্ট্রীম প্রক্রিয়াকরণের সবচেয়ে শক্তিশালী জোড়াগুলির মধ্যে একটি করে তোলে।

আমরা শিখেছি কিভাবে স্পার্ক জব ব্যবহার করে কাফকা বিষয়গুলিকে পপুলেট করা, সেবন করা এবং প্রক্রিয়া করা যায়। এটি কোন কঠিন কাজ ছিল না, পোস্টে উল্লিখিত হিসাবে, স্ট্রীম প্রসেসিং এপিআই সাধারণ ব্যাচ এপিআই-এর প্রায় সমান, সামান্য কিছু সমন্বয় সহ।

আমরা বিভিন্ন আউটপুট মোড, স্ট্রিম অ্যাপ্লিকেশনের জন্য নির্দিষ্ট কিছু এবং প্রতিটি কীভাবে ব্যবহার করা যেতে পারে তা নিয়েও আলোচনা করেছি। শেষ কিন্তু অন্তত নয়, আমরা টাইম উইন্ডোর সাথে একত্রিতকরণ অন্বেষণ করেছি, স্ট্রিম প্রক্রিয়াকরণের অন্যতম প্রধান ক্ষমতা।

আবার, এটি একটি দ্রুত চেহারা ছিল, এবং আপনি যদি আরও গভীরভাবে অন্বেষণ করতে চান তবে আমি নীচে কিছু রেফারেন্স ছেড়ে দেব।

আশা করি আমি একরকম সাহায্য করেছি, পড়ার জন্য আপনাকে ধন্যবাদ! 🙂

এতে সব কোড পাওয়া যায় GitHub সংগ্রহস্থল.
ব্যবহৃত ডেটা-
সংক্রামক ভলিউমেট্রিকাস ডি রাডারেস, ওপেন ডেটা, ব্রাজিলিয়ান গভ.

[1] ডিপ ডাইভ বৈশিষ্ট্য: অ্যাপাচি স্পার্ক স্ট্রাকচার্ড স্ট্রিমিং-এ ওয়াটারমার্কিং — Databricks ব্লগে ম্যাক্স ফিশার
[২] চেম্বারস, বি., এবং জাহারিয়া, এম. (2)। স্পার্ক: দ্যা ডেফিনিটিভ গাইড: বিগ ডেটা প্রসেসিং সহজ করা হয়েছে। "ও'রিলি মিডিয়া, ইনক।"
[3] অ্যাপাচি কাফকার সাথে রিয়েল-টাইম লজিস্টিক, শিপিং এবং পরিবহন— কাই ওয়াহনার
[4] Netflix স্টুডিও এবং ফাইন্যান্স ওয়ার্ল্ডে Apache Kafka বৈশিষ্ট্যযুক্ত - সঙ্গম ব্লগ
[৫] স্পার্ক স্ট্রিমিং এবং কাফকা — https://sparkbyexamples.com/

https://towardsdatascience.com/a-fast-look-at-spark-structured-streaming-kafka-f0ff64107325?source=rss—-7f60cf5620c9—4 এর মাধ্যমে https:/ /towardsdatascience.com/feed

<!–

->

সময় স্ট্যাম্প:

থেকে আরো ব্লকচেইন পরামর্শদাতা

র্যানসমওয়্যার অ্যাটাক থেকে ক্রিপ্টোকারেন্সি লন্ডারিং করার সন্দেহভাজন রাশিয়ান মার্কিন যুক্তরাষ্ট্রে প্রত্যর্পণ করেছে

উত্স নোড: 1631027
সময় স্ট্যাম্প: আগস্ট 19, 2022