Spouts এবং Bolts এর ধারণা

অ্যাপাচি স্টর্ম (Apache Storm) - Big Data and Analytics

413

Apache Storm এর মূল ধারণা হলো রিয়েল-টাইম ডেটা স্ট্রিমিং এবং প্রসেসিং। Storm একটি টপোলজি (Topology) ভিত্তিক আর্কিটেকচার ব্যবহার করে, যেখানে ডেটা প্রবাহিত হয় এবং বিভিন্ন নোডে প্রক্রিয়া করা হয়। এই টপোলজির দুটি প্রধান উপাদান হলো Spout এবং Bolt। এগুলো Storm এর সিস্টেমের মূল কম্পোনেন্ট হিসেবে কাজ করে, যা ডেটা সংগ্রহ এবং প্রক্রিয়াকরণের জন্য দায়ী।


Spouts (স্পাউটস)

Spout হলো ডেটা প্রবাহের উৎস (Data Source)। এটি মূলত ডেটা সংগ্রহ করে এবং Storm টপোলজিতে পাঠায়, যাতে পরবর্তী প্রসেসিংয়ের জন্য সেই ডেটা ব্যবহার করা যেতে পারে। Spout সাধারণত রিয়েল-টাইম সোর্স থেকে ডেটা সংগ্রহ করে, যেমন ফাইল সিস্টেম, ডেটাবেস, মেসেজ কিউ (যেমন Apache Kafka), বা অন্যান্য স্ট্রীমিং সার্ভিস।

Spout এর কাজ

  • ডেটা উৎস: Spout ডেটা উৎস থেকে ডেটা সংগ্রহ করে। এই উৎস হতে পারে কোনো মেসেজ কিউ, ফাইল, বা অন্য কোনো সোর্স।
  • ডেটা স্ট্রীমিং: Spout প্রতি সময় একটি নতুন ডেটা ইভেন্ট তৈরি করে এবং সেটি Storm টপোলজিতে প্রবাহিত করে।
  • রিয়েল-টাইম ডেটা ফিড: এটি সাধারণত রিয়েল-টাইম ডেটা ফিড প্রদান করে, যেমন সোশ্যাল মিডিয়া আপডেট, সিকিউরিটি অ্যালার্টস বা টুইট।

Spout এর উদাহরণ

  • Apache Kafka Spout: যেটি Apache Kafka থেকে মেসেজ সংগ্রহ করে।
  • File Spout: যেটি কোনো নির্দিষ্ট ফোল্ডার থেকে নতুন ফাইল সংগ্রহ করে।
  • Socket Spout: যেটি একটি সোকেটের মাধ্যমে ডেটা প্রবাহিত করে।

Bolts (বোল্টস)

Bolt হলো Storm টপোলজির একটি গুরুত্বপূর্ণ অংশ, যার কাজ হলো ডেটা প্রক্রিয়া করা। এটি এক বা একাধিক স্পাউট থেকে আসা ডেটা গ্রহণ করে এবং সেই ডেটার উপর প্রক্রিয়া (যেমন ফিল্টারিং, ট্রান্সফরমেশন, অ্যাগ্রিগেশন) চালায়। Bolts মূলত বিভিন্ন ধরনের প্রক্রিয়া সম্পাদন করে, যা ডেটার মান বৃদ্ধি করে এবং ফলাফল বা আউটপুট প্রদান করে।

Bolt এর কাজ

  • ডেটা প্রসেসিং: Bolt ডেটা গ্রহণ করে এবং বিভিন্ন ধরনের প্রক্রিয়া সম্পাদন করে, যেমন ফিল্টারিং, অ্যাগ্রিগেশন, বা ডেটার ট্রান্সফরমেশন।
  • ফলাফল তৈরি: প্রক্রিয়াকৃত ডেটা ফলাফল হিসেবে আউটপুট প্রদান করে বা পরবর্তী বোল্ট বা স্পাউটের কাছে পাঠায়।
  • কমপ্লেক্স প্রক্রিয়াকরণ: একটি বোল্টে একাধিক ধাপে ডেটা প্রসেসিংও করা যেতে পারে।

Bolt এর উদাহরণ

  • Filter Bolt: যেটি কোনো নির্দিষ্ট শর্তে ডেটা ফিল্টার করে।
  • Aggregate Bolt: যেটি ডেটার উপর অ্যাগ্রিগেশন প্রক্রিয়া সম্পন্ন করে, যেমন গড় মান বা সর্বাধিক মান বের করা।
  • Transform Bolt: যেটি ডেটার একটি নির্দিষ্ট রূপান্তর বা পরিবর্তন ঘটায়, যেমন টেক্সট কেস চেঞ্জ করা।

Spouts এবং Bolts এর সম্পর্ক

Spouts এবং Bolts একসাথে Storm টপোলজিতে ডেটা প্রসেসিং কার্যক্রম পরিচালনা করে। সাধারণভাবে, Spouts ডেটা প্রেরণ করে এবং Bolts সেই ডেটা প্রক্রিয়া করে। স্পাউটের কাজ হলো ডেটা প্রবাহিত করা, এবং বোল্টের কাজ হলো সেই ডেটার উপর কার্যকরী বিশ্লেষণ বা প্রক্রিয়া চালানো।

উদাহরণস্বরূপ:

  1. Spout প্রথমে ডেটা সংগ্রহ করবে (যেমন, Kafka থেকে মেসেজ সংগ্রহ করা)।
  2. Bolt সেই ডেটার উপর ট্রান্সফরমেশন, ফিল্টারিং বা অ্যাগ্রিগেশন কার্যক্রম সম্পাদন করবে।

Storm-এ এই দুটি উপাদান একত্রিত হয়ে একটি পূর্ণাঙ্গ রিয়েল-টাইম ডেটা প্রসেসিং সিস্টেম তৈরি করে, যা কম লেটেন্সি এবং উচ্চ পারফরম্যান্সের মাধ্যমে ডেটা বিশ্লেষণ করে।


উপসংহার

Spouts এবং Bolts হল Apache Storm এর দুটি মূল উপাদান, যা ডেটা সংগ্রহ এবং প্রক্রিয়া করার জন্য ব্যবহৃত হয়। Spout ডেটা উৎস থেকে ডেটা সংগ্রহ করে, এবং Bolt সেই ডেটার উপর কার্যকরী প্রক্রিয়া (যেমন ট্রান্সফরমেশন, ফিল্টারিং, অ্যাগ্রিগেশন) চালায়। Storm এর এই আর্কিটেকচার রিয়েল-টাইম ডেটা স্ট্রিম প্রসেসিংয়ের জন্য অত্যন্ত উপযোগী, যা বড় ডেটা সিস্টেমের জন্য অত্যন্ত কার্যকরী।

Content added By

Spout হলো Apache Storm এর একটি মৌলিক উপাদান যা ডেটা উৎস হিসেবে কাজ করে। Spout এর প্রধান কাজ হলো ডেটা সংগ্রহ করা এবং তা Storm টপোলজিতে পাঠানো, যাতে পরবর্তী প্রসেসিংয়ের জন্য তা বোল্ট (Bolt) দ্বারা প্রক্রিয়া করা যায়। Spout স্টর্মে ডেটা প্রেরক হিসেবে কাজ করে, এবং এটি সাধারণত রিয়েল-টাইম ডেটা সংগ্রহ এবং প্রেরণের জন্য ব্যবহৃত হয়।

Storm এর টপোলজি একটি গ্রাফের মতো, যেখানে প্রতিটি নোড একটি নির্দিষ্ট কাজ সম্পন্ন করে। Spout একটি টপোলজির প্রথম অংশ, যা ডেটা প্রবাহিত করে এবং Storm টপোলজির মধ্যে টাস্কগুলোকে শুরু করে।


Spout এর ভূমিকা এবং কাজ

Spout Storm টপোলজির মধ্যে ডেটার উৎস হিসেবে কাজ করে। এটি ডেটা সংগ্রহ করে এবং পরবর্তী পর্যায়ে তা বোল্টে পাঠিয়ে ডেটা প্রক্রিয়া করার জন্য প্রেরণ করে।

Spout এর কাজ

  1. ডেটা সংগ্রহ: Spout মূলত এক বা একাধিক ডেটা উৎস থেকে ডেটা সংগ্রহ করে। এসব সোর্স হতে পারে বিভিন্ন মেসেজ কিউ (যেমন Apache Kafka), ডেটাবেস, ফাইল সিস্টেম, বা কোনো রিয়েল-টাইম ডেটা ফিড।
  2. ডেটা প্রেরণ: Spout সংগ্রহ করা ডেটাকে Storm টপোলজির মধ্যে পাঠায়, যা পরবর্তী স্তরে প্রসেস হবে। এটি ডেটাকে Tuple (যেমন ("data1", 100)) হিসেবে পাঠায়, যা Storm এর ভিতর প্রবাহিত হয় এবং বোল্টে প্রক্রিয়া করা হয়।
  3. রিয়েল-টাইম ডেটা স্ট্রিমিং: Spout সাধারণত রিয়েল-টাইম ডেটা সংগ্রহ করে এবং এটি ধারাবাহিকভাবে Storm টপোলজিতে পাঠাতে থাকে। উদাহরণস্বরূপ, একটি Spout হতে পারে যেটি রিয়েল-টাইম সোশ্যাল মিডিয়া ফিড বা ট্রানজেকশন ডেটা সংগ্রহ করে এবং পাঠায়।
  4. ফল্ট টলারেন্স: Spout একটি গুরুত্বপূর্ণ বৈশিষ্ট্য হলো তার ফল্ট টলারেন্স। যদি কোনো কারণে Spout থেকে ডেটা প্রেরণ করা বন্ধ হয়ে যায়, তবে এটি পুনরায় ডেটা সংগ্রহ ও প্রেরণ করতে চেষ্টা করবে, যাতে ডেটা হারানো না যায়।

Spout এর কাজের ধাপ

  1. ডেটা উৎস থেকে ডেটা সংগ্রহ: Spout প্রথমে ডেটা উৎস থেকে ডেটা সংগ্রহ করে। এটি একটি নির্দিষ্ট সোর্স হতে ডেটা পড়ার প্রক্রিয়া শুরু করে। সোর্স হতে ডেটা সংগ্রহের পরে Spout সেটা Storm টপোলজিতে পাঠাতে থাকে।
  2. Tuple তৈরি করা: Spout সাধারণত একটি Tuple তৈরি করে যা Storm এর ডেটা একক ইউনিট হিসেবে কাজ করে। Tuple হতে পারে বিভিন্ন ডেটা ফিল্ড, যেমন স্ট্রিং, ইন্টিজার, বা অন্যান্য ডেটা টাইপ।
  3. ডেটা টপোলজিতে প্রেরণ: Spout প্রক্রিয়া করা ডেটা টপোলজিতে পাঠায়, যা পরবর্তী বোল্টে পৌঁছায় এবং সেখানে প্রক্রিয়া করা হয়।
  4. ডেটার স্ট্রিমিং: Spout ডেটা স্ট্রিমের আকারে Storm টপোলজিতে প্রবাহিত করে, যার ফলে পরবর্তী বোল্ট সেই ডেটার উপর কাজ করতে পারে।

Spout এর প্রকারভেদ

Spout বিভিন্ন ধরনের হতে পারে, যেমন:

  • File Spout: একটি ফাইল সিস্টেম থেকে ডেটা সংগ্রহ করে, যেমন একটি লগ ফাইল বা CSV ফাইল।
  • Kafka Spout: Apache Kafka থেকে মেসেজ সংগ্রহ করে, যেখানে Kafka মেসেজ কিউ সিস্টেম হিসেবে কাজ করে।
  • Socket Spout: একটি নেটওয়ার্ক সোকেট থেকে ডেটা সংগ্রহ করে।
  • Custom Spout: ব্যবহারকারী যদি কোনো কাস্টম ডেটা সোর্স থেকে ডেটা সংগ্রহ করতে চান, তবে তারা একটি কাস্টম Spout তৈরি করতে পারেন।

Spout কীভাবে কাজ করে: উদাহরণ

ধরা যাক, আমরা একটি Kafka Spout তৈরি করতে চাই যা Kafka থেকে মেসেজ সংগ্রহ করবে এবং তা Storm টপোলজিতে পাঠাবে। এটি কিভাবে কাজ করবে তার একটি উদাহরণ:

  1. Kafka থেকে মেসেজ গ্রহণ: Kafka Spout Kafka কনজিউমার হিসেবে কাজ করে এবং Kafka থেকে মেসেজ গ্রহণ করে। প্রতিটি মেসেজ একটি Tuple হিসেবে Storm টপোলজিতে পাঠানো হয়।
  2. Tuple তৈরি: Spout একটি Tuple তৈরি করবে, যা হবে: ("message", "This is a sample message")
  3. Storm টপোলজিতে পাঠানো: এই Tuple Storm টপোলজিতে পাঠানো হয়, যেখানে পরবর্তী বোল্ট এই মেসেজটির উপর প্রক্রিয়া করবে, যেমন এটি প্রিন্ট করা বা ডেটাবেসে সেভ করা।

Spout এর ব্যবহারের ক্ষেত্র

  1. সোশ্যাল মিডিয়া ফিড: সোশ্যাল মিডিয়া প্ল্যাটফর্মের ডেটা, যেমন টুইট বা পোস্ট, রিয়েল-টাইমে স্টর্মের মধ্যে পাঠানোর জন্য Spout ব্যবহার করা হয়।
  2. লগ ফাইল মনিটরিং: সার্ভার বা অ্যাপ্লিকেশন লগ ফাইল থেকে ডেটা সংগ্রহ এবং তা Storm টপোলজিতে পাঠাতে Spout ব্যবহার করা যেতে পারে।
  3. ট্রানজেকশন মনিটরিং: অর্থনৈতিক লেনদেন বা ব্যবসায়িক কার্যক্রমের রিয়েল-টাইম ট্র্যাকিং করতে Spout ব্যবহার করা হয়।

সারাংশ

Spout Apache Storm এর একটি অত্যন্ত গুরুত্বপূর্ণ উপাদান, যা Storm টপোলজিতে ডেটা সংগ্রহ এবং প্রবাহিত করার কাজ করে। এটি সাধারণত বিভিন্ন সোর্স থেকে ডেটা সংগ্রহ করে এবং তা পরবর্তী প্রসেসিংয়ের জন্য Tuple আকারে Storm টপোলজিতে পাঠায়। Spout রিয়েল-টাইম ডেটা স্ট্রিমিং এবং ফল্ট টলারেন্স সাপোর্ট করে, যা Storm কে একটি শক্তিশালী রিয়েল-টাইম ডেটা প্রসেসিং সিস্টেমে পরিণত করে।

Content added By

Apache Storm একটি রিয়েল-টাইম ডেটা প্রসেসিং প্ল্যাটফর্ম, যা ডেটা স্ট্রিম প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। Storm এ ডেটা প্রবাহের উৎস হিসেবে Spouts ব্যবহার করা হয়। Spout হলো Storm এর এমন একটি কম্পোনেন্ট যা ডেটা উৎস থেকে ডেটা সংগ্রহ করে এবং তা টপোলজির মধ্যে প্রবাহিত করে। Apache Storm অনেকগুলি বিল্ট-ইন Spouts প্রদান করে, যার মধ্যে Kafka এবং RabbitMQ অন্যতম জনপ্রিয় এবং বহুল ব্যবহৃত।

এই গাইডে আমরা Kafka Spout এবং RabbitMQ Spout সম্পর্কে বিস্তারিত আলোচনা করব।


Kafka Spout

Apache Kafka হলো একটি উচ্চ-পারফরম্যান্স, ডিস্ট্রিবিউটেড স্ট্রিমিং প্ল্যাটফর্ম যা বড় পরিমাণে ডেটা স্ট্রিম প্রক্রিয়াকরণে ব্যবহৃত হয়। Storm এর Kafka Spout ব্যবহার করে আপনি Kafka থেকে ডেটা পড়তে এবং Storm টপোলজিতে প্রবাহিত করতে পারেন।

Kafka Spout এর ভূমিকা:

  • ডেটা সংগ্রহ: Kafka Spout Kafka থেকে মেসেজ সংগ্রহ করে, যা Storm টপোলজিতে পাঠানো হয়।
  • রিয়েল-টাইম ডেটা স্ট্রিমিং: Kafka Spout রিয়েল-টাইম ডেটা সংগ্রহ এবং প্রসেসিংয়ের জন্য উপযুক্ত।
  • সাপোর্টেড পার্টিশন: Kafka Spout পার্টিশন ব্যবস্থাপনা সাপোর্ট করে, যা উচ্চ পারফরম্যান্সে ডেটা প্রক্রিয়াকরণে সাহায্য করে।

Kafka Spout কনফিগারেশন:

Kafka Spout ব্যবহার করতে হলে প্রথমে কিছু কনফিগারেশন করতে হবে:

  1. Storm টপোলজি কনফিগারেশন: Kafka Spout কনফিগার করতে storm.yaml ফাইলে নিচের মতো সেটিংস করতে হবে:

    spouts:
      - kafka_spout:
          class: org.apache.storm.kafka.Spout
          parallelism: 2
          zk.zkServers: "localhost"
          zk.zkPort: 2181
          kafka.topic: "my_topic"
          kafka.spout.consumer.group.id: "storm-consumer-group"
    
  2. Kafka Spout ব্যবহার: Storm টপোলজিতে Kafka Spout ব্যবহার করতে নিচের কোড ব্যবহার করা যেতে পারে:

    KafkaSpout kafkaSpout = new KafkaSpout(kafkaSpoutConfig);
    

    এখানে kafkaSpoutConfig হলো Kafka Spout এর কনফিগারেশন সেটিংস।

Kafka Spout এর সুবিধা:

  • বিল্ট-ইন পার্টিশনিং: Kafka Spout Kafka-এর পার্টিশন ব্যবস্থাকে সাপোর্ট করে, যা ডেটা প্রসেসিং সহজ এবং আরও স্কেলেবল করে।
  • কম লেটেন্সি: Kafka Spout রিয়েল-টাইম ডেটা সংগ্রহ করে এবং খুব কম লেটেন্সিতে Storm টপোলজিতে পাঠায়।

RabbitMQ Spout

RabbitMQ হলো একটি ওপেন-সোর্স, মেসেজ ব্রোকার যা AMQP (Advanced Message Queuing Protocol) ব্যবহার করে মেসেজ সার্ভিস প্রদান করে। Storm এর RabbitMQ Spout RabbitMQ থেকে ডেটা সংগ্রহ এবং তা Storm টপোলজিতে প্রবাহিত করার জন্য ব্যবহৃত হয়।

RabbitMQ Spout এর ভূমিকা:

  • ডেটা সংগ্রহ: RabbitMQ Spout RabbitMQ থেকে মেসেজ সংগ্রহ করে, যা Storm টপোলজিতে পাঠানো হয়।
  • রিয়েল-টাইম ডেটা স্ট্রিমিং: RabbitMQ Spout রিয়েল-টাইম ডেটা সংগ্রহের জন্য ব্যবহার করা হয় এবং এটি Storm এর মাধ্যমে ডেটা প্রসেসিং করে।
  • প্যারালাল প্রোসেসিং: RabbitMQ Spout Storm টপোলজির মধ্যে একাধিক মেসেজ কিউ থেকে ডেটা সংগ্রহ করতে সক্ষম, যা ডিস্ট্রিবিউটেড প্রসেসিংয়ের সুবিধা প্রদান করে।

RabbitMQ Spout কনফিগারেশন:

RabbitMQ Spout ব্যবহার করতে হলে নিচের কনফিগারেশন করতে হবে:

  1. Storm টপোলজি কনফিগারেশন: RabbitMQ Spout কনফিগার করতে storm.yaml ফাইলে কিছু সেটিংস করতে হবে:

    spouts:
      - rabbitmq_spout:
          class: org.apache.storm.rabbitmq.RabbitMQSpout
          parallelism: 2
          rabbitmq.host: "localhost"
          rabbitmq.port: 5672
          rabbitmq.queue.name: "my_queue"
    
  2. RabbitMQ Spout ব্যবহার: Storm টপোলজিতে RabbitMQ Spout ব্যবহার করতে নিচের কোড ব্যবহার করা যেতে পারে:

    RabbitMQSpout rabbitMQSpout = new RabbitMQSpout(rabbitMQSpoutConfig);
    

    এখানে rabbitMQSpoutConfig হলো RabbitMQ Spout এর কনফিগারেশন সেটিংস।

RabbitMQ Spout এর সুবিধা:

  • এমকিউ পদ্ধতির ব্যবহার: RabbitMQ Spout AMQP প্রটোকল ব্যবহার করে, যা RabbitMQ এর সাপোর্টেড পদ্ধতি হিসেবে পরিচিত।
  • স্কেলেবল: RabbitMQ Spout মেসেজ কিউয়ের উপর প্যারালাল প্রসেসিং করতে সক্ষম, যা Storm টপোলজির স্কেলেবিলিটি বাড়ায়।

Kafka Spout এবং RabbitMQ Spout এর তুলনা

বৈশিষ্ট্যKafka SpoutRabbitMQ Spout
প্রোটোকলKafka (Custom Protocol)AMQP (Advanced Message Queuing Protocol)
ডেটা সংগ্রহKafka টপিক থেকে ডেটা সংগ্রহRabbitMQ কিউ থেকে মেসেজ সংগ্রহ
স্কেলেবিলিটিউচ্চ স্কেলেবিলিটি (বড় ডেটা সেটের জন্য)ছোট বা মাঝারি স্কেল ডেটা সেটের জন্য উপযুক্ত
পারফরম্যান্সকম লেটেন্সি, দ্রুত ডেটা প্রসেসিংডেটা প্রসেসিং সাধারণত কম লেটেন্সিতে
ব্যবহার ক্ষেত্ররিয়েল-টাইম ডেটা স্ট্রিমিং, লগ প্রসেসিংমেসেজ ব্রোকার, ডিস্ট্রিবিউটেড সিস্টেমে যোগাযোগ

সারাংশ

Kafka Spout এবং RabbitMQ Spout হল Apache Storm এর শক্তিশালী বিল্ট-ইন Spouts, যা Storm-এ রিয়েল-টাইম ডেটা স্ট্রিম প্রক্রিয়াকরণের জন্য ব্যবহৃত হয়। Kafka Spout Kafka থেকে ডেটা সংগ্রহ এবং Storm টপোলজিতে পাঠায়, এবং RabbitMQ Spout RabbitMQ থেকে ডেটা সংগ্রহ করে একইভাবে Storm টপোলজিতে প্রবাহিত করে। এই দুটি Spout-এর মাধ্যমে Storm বড় স্কেল এবং রিয়েল-টাইম ডেটা প্রক্রিয়াকরণ কাজ করতে সক্ষম।

Content added By

Spouts হলো Apache Storm টপোলজির একটি গুরুত্বপূর্ণ অংশ, যেগুলি ডেটা সংগ্রহ করে এবং Storm সিস্টেমে প্রবাহিত করে। Spouts সাধারণত ডেটার উৎস থেকে ডেটা নিয়ে আসে, যেমন মেসেজ কিউ, ডেটাবেস, বা ফাইল সিস্টেম। কখনও কখনও, আপনি একটি Custom Spout তৈরি করতে পারেন যেটি আপনার নির্দিষ্ট ডেটা উৎস বা প্রক্রিয়াকরণের জন্য উপযুক্ত।

এই গাইডে আমরা শিখব কিভাবে Custom Spout তৈরি করতে হয় এবং কীভাবে Storm টপোলজিতে সেটি ব্যবহার করা যায়।


Custom Spout কী?

Custom Spout হল একটি কাস্টম ক্লাস যা Storm-এ ডেটা প্রবাহিত করার জন্য তৈরি করা হয়। এটি একটি ডেটা উৎস (যেমন Kafka, RabbitMQ, ফাইল সিস্টেম ইত্যাদি) থেকে ডেটা সংগ্রহ করে এবং emit() মেথড ব্যবহার করে Storm টপোলজিতে পাঠায়। Storm এ Spout সাধারণত IRichSpout ইন্টারফেস অথবা BaseRichSpout ক্লাসের মাধ্যমে তৈরি করা হয়।

Spout তৈরি করতে কি কি প্রয়োজন?

  1. Spout ক্লাস তৈরি করুন: আপনার কাস্টম স্পাউট ক্লাস তৈরি করুন যা Storm এর IRichSpout ইন্টারফেস ইমপ্লিমেন্ট করবে অথবা BaseRichSpout ক্লাস এক্সটেন্ড করবে।
  2. ডেটা উৎস থেকে ডেটা সংগ্রহ: Spout টাস্কের কাজ হলো ডেটা সংগ্রহ করা এবং সেটি Storm টপোলজিতে পাঠানো।
  3. emit() মেথড ব্যবহার করুন: Spout এর ডেটা প্রসেসিং বা স্ট্রিমের মাধ্যমে ইমিট করতে emit() মেথড ব্যবহার করুন।

Custom Spout তৈরি করার ধাপ

এখানে আমরা একটি Custom Spout তৈরি করার প্রক্রিয়া এবং কোড উদাহরণ দেখব।

১. BaseRichSpout ক্লাস তৈরি করা

Storm এর BaseRichSpout ক্লাসটিকে এক্সটেন্ড করে Custom Spout তৈরি করা হয়। BaseRichSpout ব্যবহার করলে আপনি বেশ কিছু ডিফল্ট কার্যক্রম সহজে পরিচালনা করতে পারেন, যেমন open(), nextTuple(), এবং close() মেথডগুলি।

২. Custom Spout কোড উদাহরণ

import org.apache.storm.spout.SpoutOutputCollector;
import org.apache.storm.task.TopologyContext;
import org.apache.storm.topology.base.BaseRichSpout;
import org.apache.storm.tuple.Fields;
import org.apache.storm.tuple.Values;

import java.util.Map;

public class MyCustomSpout extends BaseRichSpout {
    private SpoutOutputCollector collector;
    private int counter;

    @Override
    public void open(Map<String, Object> conf, TopologyContext context, SpoutOutputCollector collector) {
        this.collector = collector;
        this.counter = 0;  // ডেটা উৎপন্ন করতে কাউন্টার ব্যবহার
    }

    @Override
    public void nextTuple() {
        // প্রতি সময়ে একটি নতুন টুপল ইমিট করা
        if (counter < 5) {  // 5টি আইটেম উৎপন্ন করার জন্য
            collector.emit(new Values("Message " + counter));  // একটি টুপল তৈরি করে ইমিট করা
            counter++;
        } else {
            try {
                Thread.sleep(1000);  // যদি ডেটা না থাকে, তবে এক সেকেন্ড অপেক্ষা
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

    @Override
    public void close() {
        // Spout বন্ধ করার সময় প্রয়োজনীয় ক্লিন-আপ কোড লিখতে পারেন।
    }

    @Override
    public void declareOutputFields(Fields declarer) {
        // Spout থেকে যে ফিল্ডগুলি আউটপুট হিসেবে প্রদান হবে, তা ঘোষণা করা
        declarer.declare(new Fields("message"));
    }
}

এখানে আমরা একটি সাধারণ MyCustomSpout তৈরি করেছি যা প্রতি বার একটি নতুন বার্তা (যেমন "Message 0", "Message 1", ইত্যাদি) উৎপন্ন করবে এবং সেটি Storm টপোলজিতে পাঠাবে।

  • open(): Spout এর ইনিশিয়ালাইজেশন কাজ সম্পন্ন করে এবং এটি SpoutOutputCollector প্রাপ্ত করে, যা টুপলগুলিকে emit() করে পাঠাতে সাহায্য করে।
  • nextTuple(): এখানে ডেটা উৎপন্ন হয় এবং emit() মেথডের মাধ্যমে Storm টপোলজিতে পাঠানো হয়।
  • close(): Spout বন্ধ হওয়ার সময় কিছু ক্লিন-আপ কাজ করা যায়।
  • declareOutputFields(): Spout থেকে আউটপুট হিসেবে যেসব ফিল্ড পাঠানো হবে তা ডিফাইন করা হয়।

৩. Custom Spout টপোলজিতে যুক্ত করা

Custom Spout তৈরি করার পর, আপনাকে এটি Storm টপোলজিতে যুক্ত করতে হবে। নিচে একটি টপোলজি কোড উদাহরণ দেওয়া হলো যেখানে আমরা আমাদের কাস্টম স্পাউট ব্যবহার করছি।

import org.apache.storm.topology.TopologyBuilder;
import org.apache.storm.tuple.Fields;
import org.apache.storm.LocalCluster;

public class MyStormTopology {
    public static void main(String[] args) {
        TopologyBuilder builder = new TopologyBuilder();

        // কাস্টম স্পাউট টপোলজিতে যুক্ত করা
        builder.setSpout("myCustomSpout", new MyCustomSpout(), 1);

        // একটি বোল্ট যুক্ত করা
        builder.setBolt("printBolt", new PrintBolt(), 1).shuffleGrouping("myCustomSpout");

        // টপোলজি তৈরি
        LocalCluster cluster = new LocalCluster();
        cluster.submitTopology("myTopolgy", new Config(), builder.createTopology());

        // টপোলজি কিছুক্ষণ চলার পর ক্লাস্টার বন্ধ করা
        try {
            Thread.sleep(10000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        cluster.shutdown();
    }
}

এখানে আমরা MyCustomSpout কে setSpout() মেথডের মাধ্যমে টপোলজিতে যুক্ত করেছি এবং একটি PrintBolt বোল্ট ব্যবহার করেছি, যা Spout থেকে প্রাপ্ত টুপল প্রিন্ট করবে।


৪. Custom Spout এর বোল্ট তৈরি করা

একটি সাধারণ PrintBolt বোল্ট যা Spout থেকে প্রাপ্ত টুপল প্রিন্ট করবে:

import org.apache.storm.task.OutputCollector;
import org.apache.storm.topology.BasicBolt;
import org.apache.storm.tuple.Tuple;

public class PrintBolt extends BasicBolt {
    @Override
    public void execute(Tuple input) {
        // Spout থেকে আসা মেসেজ প্রিন্ট করা
        String message = input.getStringByField("message");
        System.out.println("Received: " + message);
    }

    @Override
    public void declareOutputFields(Fields declarer) {
        // এই বোল্ট কোন আউটপুট দিবে না
    }
}

এটি কাস্টম স্পাউটের আউটপুট টুপলগুলো প্রিন্ট করবে।


সারাংশ

Custom Spout তৈরি করার মাধ্যমে আপনি Storm টপোলজিতে আপনার প্রয়োজনীয় ডেটা উৎস বা লজিক ইনজেক্ট করতে পারেন। BaseRichSpout বা IRichSpout ইন্টারফেস ব্যবহার করে Spout তৈরি করা হয়, যা Storm টপোলজির মধ্যে ডেটা প্রবাহিত করার জন্য কার্যকরী। Spout এর মাধ্যমে ডেটা সংগ্রহ, ইমিট করা, এবং আউটপুট ফিল্ড ঘোষণা করা সম্ভব।

Content added By

Bolts হলো Apache Storm এর একটি গুরুত্বপূর্ণ উপাদান, যা ডেটা প্রসেসিং ইউনিট হিসেবে কাজ করে। Storm এর আর্কিটেকচারে, Spouts ডেটা উৎস থেকে ডেটা সংগ্রহ করে এবং সেই ডেটা Bolts এর মাধ্যমে প্রক্রিয়া করা হয়। Bolts সাধারণত বিভিন্ন ধরণের ডেটা প্রক্রিয়াকরণ, ফিল্টারিং, অ্যাগ্রিগেশন, ট্রান্সফরমেশন, অথবা অন্য কোনো কাজ সম্পন্ন করে।


Bolts এর ভূমিকা

Bolts মূলত ডেটা স্ট্রিমের বিভিন্ন প্রসেসিং কাজ সম্পাদন করে। Spouts থেকে প্রাপ্ত ডেটা Bolts এর কাছে পৌঁছায় এবং Bolts সেই ডেটা প্রক্রিয়া করে পরবর্তী স্তরে পাঠায়। তাদের প্রধান ভূমিকা হলো ডেটা প্রক্রিয়াকরণ এবং ফলাফল তৈরি। এই প্রক্রিয়াটি Storm টপোলজির মধ্যে গুরুত্বপূর্ণ ভূমিকা পালন করে, যেখানে বিভিন্ন Bolts একে অপরের সাথে সংযুক্ত হয়ে কাজ সম্পন্ন করে।


Bolts এর বিভিন্ন ধরনের কাজ

১. ডেটা ফিল্টারিং (Data Filtering)

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

২. ডেটা অ্যাগ্রিগেশন (Data Aggregation)

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

৩. ট্রান্সফরমেশন (Transformation)

Bolts ডেটাকে একটি ফর্ম্যাট থেকে অন্য ফর্ম্যাটে রূপান্তরিত করতে পারে। উদাহরণস্বরূপ, JSON ফরম্যাটে থাকা ডেটাকে XML ফরম্যাটে রূপান্তরিত করা।

৪. ডেটা এনরিচমেন্ট (Data Enrichment)

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

৫. ডেটা স্টোরেজ (Data Storage)

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


Bolts এর কাঠামো

Storm টপোলজিতে একটি Bolt সাধারণত একটি ক্লাস বা ফাংশন হিসেবে সংজ্ঞায়িত হয়, যা ডেটা প্রক্রিয়া করার জন্য উপযুক্ত লজিক সংরক্ষণ করে। Bolts গুলি Storm-এর Bolt Interface ইমপ্লিমেন্ট করে এবং নির্দিষ্ট মেথডগুলো ব্যবহার করে কাজ করে।

  • execute() মেথড: এটি Bolts এর একটি মৌলিক মেথড, যা ইনপুট ডেটা গ্রহণ করে এবং এটি প্রক্রিয়া করে পরবর্তী অ্যাকশন বা আউটপুট প্রদান করে।
  • prepare() মেথড: এটি Bolt কে প্রাথমিক কনফিগারেশন বা প্রস্তুতি সরবরাহ করতে ব্যবহৃত হয়, যেমন কনফিগারেশন ডেটা গ্রহণ করা বা কোনো এক্সটার্নাল রিসোর্স লোড করা।

Bolts এর ইন্টিগ্রেশন

একটি Storm টপোলজিতে একাধিক Bolts একে অপরের সাথে যুক্ত থাকতে পারে। উদাহরণস্বরূপ:

  • একটি Bolt একটি নির্দিষ্ট ফিল্টারিং কাজ সম্পাদন করবে, এবং তারপর অন্য একটি Bolt সেই ডেটার উপর অ্যাগ্রিগেশন কাজ করবে।
  • একাধিক Bolts একে অপরের সাথে তথ্য শেয়ার করতে পারে এবং স্ট্রিমিং ডেটার উপর বিভিন্ন ধরণের বিশ্লেষণ সম্পন্ন করতে পারে।

Bolts এবং Spouts এর মধ্যে পার্থক্য

  • Spouts: Spouts হলো ডেটার উৎস, যা বাহ্যিক সিস্টেম (যেমন, Apache Kafka, RabbitMQ, ডেটাবেস, ফাইল ইত্যাদি) থেকে ডেটা সংগ্রহ করে Storm টপোলজিতে প্রবাহিত করে।
  • Bolts: Bolts হলো ডেটা প্রসেসিং ইউনিট, যা Spouts থেকে প্রাপ্ত ডেটা প্রক্রিয়া করে এবং পরবর্তী কাজে পাঠায়। Bolts ডেটা ফিল্টারিং, ট্রান্সফরমেশন, অ্যাগ্রিগেশন ইত্যাদি কাজ করে।

Bolts এর কিছু উদাহরণ

  1. একটি ফিল্টারিং Bolt:
    • এটি ডেটার মধ্যে কোনো নির্দিষ্ট শর্ত অনুসরণ করে ডেটা ফিল্টার করবে, যেমন শুধু পজিটিভ রেটিংগুলো নিয়ে কাজ করা।
  2. একটি অ্যাগ্রিগেশন Bolt:
    • এটি ডেটার উপর গড়, সর্বোচ্চ মান বা অন্য কোনো অ্যাগ্রিগেশন ফাংশন প্রয়োগ করবে, যেমন একটি নির্দিষ্ট সময়কালে কতবার একটি শব্দ ব্যবহৃত হয়েছে তা গণনা করা।
  3. একটি ডেটাবেস স্টোরেজ Bolt:
    • এটি প্রক্রিয়া করা ডেটা ডেটাবেসে সঞ্চয় করবে, যেমন ব্যবহারকারীর কার্যকলাপ ট্র্যাক করে সেটি ডাটাবেসে জমা করা।

উপসংহার

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

Content added By

Apache Storm একটি রিয়েল-টাইম, ডিসট্রিবিউটেড ডেটা প্রসেসিং সিস্টেম যা Spout এবং Bolt এর মাধ্যমে ডেটা প্রসেসিং কার্যক্রম সম্পন্ন করে। Storm এর টপোলজি (Topology) গঠন করতে এই দুটি উপাদান একসাথে কাজ করে। স্পাউট এবং বোল্ট Storm এর মূল ডেটা প্রক্রিয়াকরণ উপাদান, যেখানে স্পাউট ডেটা উৎপন্ন করে এবং বোল্ট সেই ডেটার উপর প্রক্রিয়া চালায়। চলুন, আমরা Spout এবং Bolt এর ভূমিকা সম্পর্কে বিস্তারিতভাবে জানি।


Spout (স্পাউট) এর ভূমিকা

Spout হলো ডেটা উৎস বা প্রেরক (Data Source), যা Storm টপোলজিতে ডেটা প্রবাহিত করতে সাহায্য করে। স্পাউট মূলত ডেটা সংগ্রহ করে এবং পরবর্তী প্রসেসিংয়ের জন্য তা টপোলজির মধ্যে পাঠায়। এটি ডেটা উৎপন্ন করে, যা স্টর্মের পরবর্তী অংশে পাঠানো হয়।

Spout এর ভূমিকা:

  • ডেটা সংগ্রহ: Spout মূলত বিভিন্ন ডেটা উৎস থেকে ডেটা সংগ্রহ করে। এটি সোর্স হতে পারে একটি মেসেজ কিউ (যেমন Apache Kafka), ডেটাবেস, ফাইল সিস্টেম বা অন্য কোনো রিয়েল-টাইম ডেটা ফিড।
  • ডেটা স্ট্রিমিং: Spout থেকে ডেটা একাধিক Tuple হিসেবে Storm টপোলজির মধ্যে প্রবাহিত হয়। প্রতি Tuple একটি ডেটার একক ইউনিট হিসেবে কাজ করে।
  • রিয়েল-টাইম ডেটা: Spout সাধারণত রিয়েল-টাইম ডেটা প্রেরণ করে, যেমন সোশ্যাল মিডিয়া পোস্ট, সিকিউরিটি অ্যালার্ট, সিস্টেম লগ, বা ট্রানজেকশন ডেটা।
  • ফল্ট টলারেন্স: Spout ডেটা সংগ্রহের সময় যদি কোনো সমস্যা হয়, তবে এটি পুনরায় ডেটা সংগ্রহের চেষ্টা করে।

উদাহরণ:

ধরা যাক, একটি Spout একটি Kafka থেকে মেসেজ সংগ্রহ করে এবং Storm টপোলজিতে পাঠাচ্ছে। এখানে Kafka হলো Spout এর ডেটা উৎস, এবং Spout প্রতিটি মেসেজকে Tuple হিসেবে পাঠাবে, যা পরবর্তী বোল্টে প্রসেস হবে।


Bolt (বোল্ট) এর ভূমিকা

Bolt হলো Storm টপোলজির একটি প্রসেসিং ইউনিট যা Spout থেকে প্রাপ্ত ডেটার উপর বিভিন্ন ধরনের কাজ সম্পন্ন করে। বোল্টের প্রধান কাজ হলো ডেটা প্রসেসিং, ট্রান্সফরমেশন, অ্যাগ্রিগেশন বা ফিল্টারিং করা। এটি সাধারণত একাধিক ধাপে ডেটার উপর কাজ করে এবং প্রক্রিয়া করা ডেটা পরবর্তী পর্যায়ে পাঠায়।

Bolt এর ভূমিকা:

  • ডেটা প্রসেসিং: Bolt মূলত Spout থেকে প্রাপ্ত ডেটার উপর বিভিন্ন ধরনের প্রক্রিয়া সম্পন্ন করে, যেমন ফিল্টারিং, ট্রান্সফরমেশন, অ্যাগ্রিগেশন, বা ম্যানিপুলেশন।
  • টাস্ক এক্সিকিউশন: বোল্ট একাধিক টাস্ক বা কাজ একযোগভাবে পরিচালনা করতে পারে। এটি একাধিক বোল্টের মাধ্যমে কাজের ভাগবাটোয়ারা করতে পারে, যেখানে প্রতিটি বোল্ট একটি নির্দিষ্ট প্রক্রিয়া চালায়।
  • ফলাফল আউটপুট: বোল্ট প্রসেসিংয়ের পর আউটপুট তৈরি করে, যা পরবর্তী বোল্ট বা Spout এর কাছে পাঠানো যেতে পারে।
  • কমপ্লেক্স প্রসেসিং: বোল্ট আরো জটিল বা বহুমাত্রিক ডেটা প্রসেসিং সম্পন্ন করতে সক্ষম, যেমন ডেটার বিভিন্ন ফিল্ডের উপর কাজ করা বা ডেটা মেলানো।

উদাহরণ:

ধরা যাক, একটি Bolt একটি ট্রান্সফরমেশন কাজ সম্পন্ন করছে, যেমন "Lowercase" এ ডেটার পরিবর্তন। বোল্টটি স্পাউট থেকে প্রাপ্ত টেক্সট ডেটার উপরে "Lowercase" ট্রান্সফরমেশন করবে এবং পরবর্তী বোল্টে পাঠাবে।


Spout এবং Bolt এর মধ্যে সম্পর্ক

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

  • Spout: ডেটা সংগ্রহকারী। এটি বিভিন্ন সোর্স থেকে ডেটা নিয়ে Storm-এ প্রবাহিত করে।
  • Bolt: ডেটা প্রক্রিয়াকরণকারী। এটি Spout থেকে প্রাপ্ত ডেটার উপর কাজ করে এবং ফলাফল তৈরি করে।

Spout এবং Bolt এর ব্যবহার

  1. Spout ব্যবহার:
    • ডেটা সংগ্রহ: Spout ডেটা সোর্স থেকে ডেটা সংগ্রহ করে এবং Storm টপোলজিতে পাঠায়।
    • রিয়েল-টাইম ডেটা স্ট্রিমিং: Spout সাধারণত লাইভ ডেটা সোর্স (যেমন সোশ্যাল মিডিয়া ফিড, ট্রানজেকশন ডেটা) থেকে ডেটা পাঠায়।
  2. Bolt ব্যবহার:
    • ডেটা প্রসেসিং: Bolt ডেটার উপর বিভিন্ন কাজ সম্পন্ন করে, যেমন অ্যাগ্রিগেশন, ফিল্টারিং, এবং ট্রান্সফরমেশন।
    • ফলাফল প্রদান: Bolt প্রক্রিয়া করা ডেটা পরবর্তী স্টেপ বা বোল্টে পাঠায়।

সারাংশ

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

Content added By
Promotion

Are you sure to start over?

Loading...