কাফকার বিষয় এবং পার্টিশন বোঝা


185

আমি এন্টারপ্রাইজ সমাধানের উদ্দেশ্যে কাফকা শিখতে শুরু করি।

আমার পড়ার সময়, আমার মনে কিছু প্রশ্ন এসেছিল:

  1. যখন কোনও প্রযোজক কোনও বার্তা তৈরি করে থাকেন - এটি মেসেজটি প্রেরণ করতে চায় সেই বিষয়টি নির্দিষ্ট করে দেবে, এটা কি ঠিক? এটি কি পার্টিশন সম্পর্কে যত্নশীল?
  2. যখন কোনও গ্রাহক চলমান - এটির গ্রুপ আইডি কি এটি নির্দিষ্ট করে যাতে এটি একই বিষয়ের গ্রাহকদের ক্লাস্টারের অংশ হতে পারে, বা এই গোষ্ঠীর গ্রাহকরা বেশ কয়েকটি বিষয় আগ্রহী?
  3. প্রতিটি গ্রাহক দলের ব্রোকারে কি একই পার্টিশন রয়েছে বা প্রতিটি গ্রাহকের একটি রয়েছে?

  4. পার্টিশনগুলি কি ব্রোকার দ্বারা তৈরি করা হয়েছে, এবং তাই ভোক্তাদের জন্য উদ্বেগ নয়?

  5. যেহেতু এটি প্রতিটি বিভাজনের জন্য অফসেট সহ একটি সারি, তাই কোন বার্তাটি পড়তে চায় তা নির্দিষ্ট করা কি ভোক্তার দায়িত্ব? এটির রাষ্ট্র বাঁচানোর দরকার কি?

  6. কোনও বার্তা সারি থেকে মুছে ফেলা হলে কী হয়? - উদাহরণস্বরূপ: ধরে রাখার জন্য 3 ঘন্টা ছিল, তারপরে সময় কেটে যায়, উভয় পক্ষের কীভাবে অফসেটটি পরিচালনা করা হচ্ছে?

উত্তর:


162

এই পোস্টটির ইতিমধ্যে উত্তর রয়েছে তবে আমি কাফকা সংজ্ঞা নির্দেশিকা থেকে কয়েকটি ছবি দিয়ে আমার ভিউ যুক্ত করছি

প্রতিটি প্রশ্নের উত্তর দেওয়ার আগে, আসুন উত্পাদক উপাদানগুলির একটি সংক্ষিপ্তসার যুক্ত করুন:

প্রযোজক উপাদানগুলির ওভারভিউ

১. যখন কোনও প্রযোজক কোনও বার্তা তৈরি করছেন - এটি মেসেজটি প্রেরণ করতে চায় সেই বিষয়টি নির্দিষ্ট করে দেবে, তা কি ঠিক? এটি কি পার্টিশন সম্পর্কে যত্নশীল?

প্রযোজক কোনও বার্তা দেওয়ার জন্য টার্গেট পার্টিশন সিদ্ধান্ত নেবেন, তার উপর নির্ভর করে:

  • পার্টিশন আইডি, যদি এটি বার্তার মধ্যে নির্দিষ্ট করা থাকে
  • কী% num পার্টিশন , পার্টিশন আইডি উল্লেখ না করা হলে
  • রাউন্ড রবিন যদি পার্টিশনের আইডি বা বার্তা কী ম্যাসেজে না থাকে তবে কেবলমাত্র মান পাওয়া যায়

২. যখন কোনও গ্রাহক চলমান থাকে - এটির গ্রুপ আইডি কি এটি নির্দিষ্ট করে যাতে এটি একই বিষয়ের গ্রাহকদের ক্লাস্টারের অংশ হতে পারে বা এই গ্রুপের গ্রাহকরা আগ্রহী বেশ কয়েকটি বিষয়ের জন্য?

আপনি সরল অ্যাসাইনমেন্ট এপিআই ব্যবহার না করা এবং কাফকার মধ্যে আপনার অফসেট সংরক্ষণ করার প্রয়োজন না হলে আপনার অবশ্যই সর্বদা group.id কনফিগার করা উচিত । এটি কোনও গ্রুপের অংশ হবে না। উৎস

৩. প্রতিটি গ্রাহক দলের ব্রোকারে কি একই পার্টিশন রয়েছে বা প্রতিটি গ্রাহকের একটি রয়েছে?

একটি গ্রাহক গ্রুপে, প্রতিটি বিভাজন কেবলমাত্র একজন গ্রাহক দ্বারা প্রক্রিয়া করা হবে । এগুলি সম্ভাব্য পরিস্থিতি ari

  • গ্রাহকের সংখ্যা টপিক পার্টিশনের সংখ্যার চেয়ে কম তবে গ্রুপের গ্রাহকদের মধ্যে একাধিক পার্টিশন বরাদ্দ করা যেতে পারে বিষয় পার্টিশনের চেয়ে গ্রাহকের সংখ্যা কম
  • ভোক্তাদের সংখ্যা একই বিষয়ে পার্টিশন সংখ্যা যেমন, তারপর পার্টিশন এবং ক্রেতার ম্যাপিং, নিচের মত হতে পারে বিষয় পার্টিশনের সংখ্যার সমান ভোক্তার সংখ্যা
  • ভোক্তার সংখ্যা বিষয় পার্টিশনের সংখ্যার চেয়ে বেশি , তারপরে পার্টিশন এবং গ্রাহক ম্যাপিং নীচের মত দেখা যাবে, কার্যকর নয়, গ্রাহক 5 পরীক্ষা করুন বিষয়ের পার্টিশনের সংখ্যার চেয়ে বেশি ভোক্তার সংখ্যা

৪. দালাল দ্বারা তৈরি পার্টিশন হিসাবে, তাই ভোক্তাদের জন্য উদ্বেগ নয়?

৩ নং প্রশ্নে যেমন আলোচনা করা হয়েছে তেমন পার্টিশনের সংখ্যা সম্পর্কে গ্রাহককে সচেতন হওয়া উচিত

৫. যেহেতু এটি প্রতিটি বিভাজনের জন্য অফসেট সহ একটি সারি, তাই কোন বার্তাটি পড়তে চায় তা নির্দিষ্ট করা কি ভোক্তার দায়িত্ব? এটির রাষ্ট্র বাঁচানোর দরকার কি?

কাফকা (নির্দিষ্ট গ্রুপ সমন্বয়কারী হতে ) একটি অভ্যন্তরীণ __consumer_offsets বিষয়টিতে একটি বার্তা তৈরি করে অফসেট অবস্থার যত্ন করে , এই আচরণটি ম্যানুয়ালটিতে পাশাপাশি সেট করেও কনফিগারযোগ্য হতে enable.auto.commitপারে false। যে ক্ষেত্রে consumer.commitSync()এবং consumer.commitAsync()অফসেট পরিচালনার জন্য সহায়ক হতে পারে।

গ্রুপ সমন্বয়কারী সম্পর্কে আরও :

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

A. কোন বার্তা সারি থেকে মুছে ফেলা হলে কী ঘটে? - উদাহরণস্বরূপ: ধরে রাখার জন্য 3 ঘন্টা ছিল, তারপরে সময় কেটে যায়, উভয় পক্ষের অফসেটটি কীভাবে পরিচালনা করা হচ্ছে?

যদি কোনও গ্রাহক ধরে রাখার সময়কালের পরে শুরু করেন তবে auto.offset.resetকনফিগারেশন অনুযায়ী বার্তা গ্রাস করা হবে latest/earliest। প্রযুক্তিগতভাবে এটি latest(নতুন বার্তাগুলি প্রক্রিয়াকরণ শুরু করুন) কারণ সমস্ত বার্তাগুলি সেই সময়ের মধ্যেই শেষ হয়ে গিয়েছিল এবং ধরে রাখা বিষয় বিষয় স্তর কনফিগারেশন।


5
ওহে ! আমি স্বীকৃত উত্তরের লেখক, তবে আমি মনে করি আপনার খুব ভাল লাগছে, বিশেষত উল্লেখযোগ্য পয়েন্ট 3 নম্বরে যেখানে ডায়াগ্রামগুলি 200% পরিষ্কার করে! আপনি কি আমাদের একীভূত করা উচিত বলে মনে করেন?
সি 4 স্টোর 12 '20

আমি বোঝাতে চাইছিলাম যে আমি (বা আপনি) আপনার উত্তরগুলির উপাদানগুলিকে খনিতে অন্তর্ভুক্ত করতে পারব, তাদের আরও দৃশ্যমানতা পেতে এবং এই (বর্তমানে) শীর্ষ উত্তরটি উন্নত করতে। কিন্তু আমি আপনার চুক্তি ছাড়া এটি না!
সি 4 স্টোর

কেন একটি পার্টিশনে মাল্টি ভোক্তা মানচিত্র করতে পারে না? বার্তাটি একবারের জন্য প্রক্রিয়া নিশ্চিত করতে? আপনার উত্তরের জন্য ধন্যবাদ।
g10guang

1
@ g10guang: অফসেট রক্ষণাবেক্ষণে প্রতিশ্রুতি করতে অসুবিধা হওয়ায় এটি ।
mrsrinivas

1
আর একটি দৃশ্য। আপনার কাছে একটি পার্টিশন এবং মাল্টিপল গ্রাহকরা এতে সাবস্ক্রাইব / নিযুক্ত থাকতে পারেন। ব্রোকার কেবল প্রথম নিবন্ধিত গ্রাহককে রেকর্ড সরবরাহ করবে। তবে ধরা যাক প্রথম ভোক্তা জরিপের ব্যবধানের চেয়ে কাজের প্রক্রিয়া করতে বেশি সময় নেয়। রেকর্ড খরচ গ্রাহক দালাল করা হয় না। ব্রোকার বুঝতে পারে যে ভোক্তা আউট হয়ে গেছে। এই অবস্থায়, ব্রোকার তার সমস্ত গ্রাহককে নতুন নির্ধারিত পার্টিশনগুলি প্রেরণ করে একটি পুনঃসামগ্রী তৈরি করে। বার্তাটি অন্য গ্রাহকরা আবার গ্রাস করেছেন যদিও এটি এখনও সি 1 দ্বারা প্রক্রিয়াজাত করা হচ্ছে। সতর্ক হোন.
রুবেন ড্যাডেরিও

127

আসুন সেগুলি যথাযথভাবে নেওয়া যাক :)

1 - যখন কোনও প্রযোজক কোনও বার্তা তৈরি করছেন - এটি যে বিষয়টিকে বার্তাটি প্রেরণ করতে চায় তা উল্লেখ করবে, তা কি ঠিক? এটি কি পার্টিশন সম্পর্কে যত্নশীল?

ডিফল্টরূপে, প্রযোজক বিভাজন সম্পর্কে চিন্তা করে না। আরও ভাল নিয়ন্ত্রণের জন্য আপনার কাছে একটি কাস্টমাইজড পার্টিশনার ব্যবহার করার বিকল্প রয়েছে তবে এটি সম্পূর্ণ alচ্ছিক।


2 - যখন কোনও গ্রাহক চলমান - এটির গ্রুপ আইডি কি এটি নির্দিষ্ট করে যাতে এটি একই বিষয়ের গ্রাহকগণের গোষ্ঠীর অংশ হতে পারে বা এই গ্রুপের গ্রাহকরা আগ্রহী বেশ কয়েকটি বিষয়ের জন্য?

হ্যাঁ, গ্রাহকরা লোড ভাগ করে নেওয়ার জন্য একটি গ্রাহক দলে যোগদান (বা তারা একা থাকলে তৈরি করুন)। একই গ্রুপের কোনও দু'জন গ্রাহক কখনও একই বার্তা পাবেন না।


3 - প্রতিটি গ্রাহক দলের ব্রোকারের সাথে কি একই পার্টিশন রয়েছে বা প্রতিটি গ্রাহকের একটি রয়েছে?

আমরাও। গ্রাহক গোষ্ঠীর সমস্ত গ্রাহককে দুটি শর্তের অধীনে পার্টিশনের একটি সেট বরাদ্দ করা হয়: একই গ্রুপের কোনও দুটি গ্রাহকের সাধারণ কোনও বিভাজন নেই - এবং সামগ্রিকভাবে গ্রাহক গোষ্ঠী প্রতিটি বিদ্যমান পার্টিশন নির্ধারিত হয়।


4 - ব্রোকার দ্বারা তৈরি পার্টিশনগুলি কি গ্রাহকদের জন্য উদ্বেগ নয়?

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


5 - যেহেতু এটি প্রতিটি বিভাজনের জন্য একটি অফসেট সহ একটি সারি, তাই কোন বার্তাটি পড়তে চায় তা নির্দিষ্ট করা কি ভোক্তার দায়িত্ব? এটির রাষ্ট্র বাঁচানোর দরকার কি?

হ্যাঁ, গ্রাহকরা পার্টিশন অনুযায়ী প্রতিটি বিষয় প্রতি অফসেট সংরক্ষণ করেন। এটি পুরোপুরি কাফকা পরিচালনা করেছেন, এটি নিয়ে কোনও উদ্বেগ নেই।


6 - একটি বার্তা সারি থেকে মুছে ফেলা হলে কী হয়? - উদাহরণস্বরূপ: ধরে রাখার জন্য 3 ঘন্টা ছিল, তারপরে সময় কেটে যায়, উভয় পক্ষের অফসেটটি কীভাবে পরিচালনা করা হচ্ছে?

যদি কোনও গ্রাহক কখনই ব্রোকারগুলিতে কোনও পার্টিশনের জন্য অফসেট উপলব্ধ না করার অনুরোধ করে (উদাহরণস্বরূপ, মোছার কারণে), এটি একটি ত্রুটি মোডে প্রবেশ করে এবং শেষ পর্যন্ত এই পার্টিশনের জন্য নিজেকে সাম্প্রতিকতম বা পুরানো বার্তা উপলক্ষে পুনরায় সেট করে (উপর নির্ভর করে auto.offset.reset কনফিগারেশন মান), এবং কাজ চালিয়ে যান।


3
শ্রী :) :) পুরো কাফকা প্রক্রিয়াটি 500 টি চর বাক্সে ব্যাখ্যা করা কিছুটা কঠিন I kafka.apache.org/docamentation.html#theconsumer (এবং সম্ভবত বিভাগের বাকী 4 অংশ কাফকা ইন্টার্নাল সম্পর্কে) দিই । মূলত: গ্রাহকরা অফসেটগুলি সংরক্ষণের জন্য অনুরোধ করেন তবে সেগুলি অন্যত্র সংরক্ষণ করা হয়।
সি

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

20

কাফকা টপিক ধারণাটি ব্যবহার করে যা বার্তা প্রবাহে অর্ডার আনতে আসে।

লোড ভারসাম্য বজায় রাখতে, কোনও বিষয় একাধিক পার্টিশনে বিভক্ত হয়ে ব্রোকারগুলিতে প্রতিলিপি করা যেতে পারে।

পার্টিশন অর্ডার করা হয়, ক্রমাগত যুক্ত হওয়া বার্তাগুলির অপরিবর্তনীয় ক্রমগুলি যেমন কমিট লগ।

পার্টিশনের বার্তাগুলিতে একটি ক্রমিক আইডি নম্বর থাকে যা পার্টিশনের মধ্যে প্রতিটি বার্তা স্বতন্ত্রভাবে সনাক্ত করে।

পার্টিশনগুলি কোনও একক সার্ভারে (ব্রোকার) মাপসই করা এবং প্যারালালিজমের একক হিসাবে কাজ করবে এমন আকারের বাইরে মাপতে কোনও বিষয়ের লগের অনুমতি দেয়।

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

প্রতিটি পার্টিশন দোষ সহনশীলতার জন্য বীমা হিসাবে একটি কনফিগারযোগ্য সংখ্যক ব্রোকার জুড়ে প্রতিলিপি করা হয়।

এই নিবন্ধে ভাল ব্যাখ্যা করা হয়েছে: http://codeflex.co/ কি-is-apache-kafka/


পার্টিশন কি কেবল বিষয় লোড ব্যালেন্সের জন্য?
g10guang

1
@ g10guang: পার্টিশনগুলি সমান্তরালে বার্তাগুলি প্রসেস করতে সহায়তা করে।
mrsrinivas

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

1
@ অতুল বার্তাটি বর্তমান পার্টিশনারের কনফিগারেশন অনুসারে সেই টপিকের জন্য ১ টি পার্টিশনের সাথে সংযুক্ত হয়ে যাবে (পূর্বনির্ধারিতভাবে বার্তা কীটির হ্যাশটি নির্ধারণ করে যে বার্তাটি কোন পার্টিতে যায়) এবং হ্যাঁ, কোনও গ্রাহক বার্তাটি বেছে নেবে এটি সেই বিভাজন থেকে বার্তা গ্রহণ করে
কেভিন হুক

কেভিন হুক, ব্যাখ্যা এবং আমার বোঝা পরিষ্কার করার জন্য ধন্যবাদ।
অতুল
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.