অত্যন্ত সহায়ক গৃহীত উত্তর ছাড়াও আমি আরও কয়েকটি বিশদ যুক্ত করতে চাই
বিভাজন
ডিফল্টরূপে, কাফকা বার্তাটির কীটি ব্যবহার করে এতে লেখা বিষয়টির বিভাজন নির্বাচন করে। এটি দ্বারা করা DefaultPartitioner
হয়
kafka.common.utils.Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
যদি কোনও কী সরবরাহ করা হয় না, তবে কাফকা একটি বৃত্তাকার রবিন ফ্যাশনে এলোমেলোভাবে ডেটা ভাগ করবে।
কাফকার ক্ষেত্রে Partitioner
ক্লাস বাড়িয়ে নিজের পার্টিশনার তৈরি করা সম্ভব । এর জন্য, আপনাকে partition
স্বাক্ষরযুক্ত পদ্ধতিটি ওভাররাইড করতে হবে :
int partition(String topic,
Object key,
byte[] keyBytes,
Object value,
byte[] valueBytes,
Cluster cluster)
সাধারণত, কাফকা বার্তার কীটি পার্টিশন নির্বাচন করতে ব্যবহৃত হয়। কোনও কী না থাকলে আপনাকে সেই মানটির উপর নির্ভর করতে হবে যা প্রক্রিয়া করার জন্য আরও জটিল হতে পারে।
অর্ডার দিচ্ছে
প্রদত্ত উত্তরে যেমন বলা হয়েছে, কাফকার কেবলমাত্র পার্টিশন পর্যায়ে বার্তাগুলি অর্ডার করার নিশ্চয়তা রয়েছে।
ধরা যাক আপনি দুটি গ্রাহকদের সাথে কাফকা বিষয়ে আপনার গ্রাহকদের জন্য আর্থিক লেনদেন সঞ্চয় করতে চান। বার্তাগুলি দেখতে দেখতে (কী: মান)
null:{"customerId": 1, "changeInBankAccount": +200}
null:{"customerId": 2, "changeInBankAccount": +100}
null:{"customerId": 1, "changeInBankAccount": +200}
null:{"customerId": 1, "changeInBankAccount": -1337}
null:{"customerId": 1, "changeInBankAccount": +200}
যেহেতু আমরা কোনও কীটি সংজ্ঞায়িত না করে দুটি পার্টিশন সম্ভবত প্রদর্শিত হবে
// partition 0
null:{"customerId": 1, "changeInBankAccount": +200}
null:{"customerId": 1, "changeInBankAccount": +200}
null:{"customerId": 1, "changeInBankAccount": +200}
// partition 1
null:{"customerId": 2, "changeInBankAccount": +100}
null:{"customerId": 1, "changeInBankAccount": -1337}
আপনার গ্রাহকরা সেই বিষয়টি পড়ে শেষ হতে পারে যে অ্যাকাউন্টে ব্যালেন্সটি নির্দিষ্ট সময়ে 600 হয় যদিও এটি কখনও হয়নি! পার্টিশন 1-এ থাকা বার্তাগুলির পূর্বে এটি 0 বিভাজনে সমস্ত বার্তা পড়ছিল বলে।
একটি বোধগম্য কী (গ্রাহকআইডের মতো) দিয়ে এড়ানো যায় কারণ পার্টিশনিংটি এরকম হবে:
// partition 0
1:{"customerId": 1, "changeInBankAccount": +200}
1:{"customerId": 1, "changeInBankAccount": +200}
1:{"customerId": 1, "changeInBankAccount": -1337}
1:{"customerId": 1, "changeInBankAccount": +200}
// partition 1
2:{"customerId": 2, "changeInBankAccount": +100}
লগ কমপ্যাকশন
আপনার বার্তাগুলি অংশ হিসেবে একটি কী ছাড়া, আপনি বিষয় কনফিগারেশন সেট করতে সক্ষম হবেন না cleanup.policy
করতে compacted
। ডকুমেন্টেশন অনুসারে "লগ কমপ্যাকশন নিশ্চিত করে যে কাফকা সর্বদা একটি টপিক পার্টিশনের জন্য ডেটা লগের মধ্যে প্রতিটি বার্তা কীটির জন্য কমপক্ষে সর্বশেষ জ্ঞাত মান বজায় রাখে।"
এই দুর্দান্ত এবং সহায়ক সেটিংটি কোনও কী ছাড়াই উপলব্ধ হবে না।
কীগুলির ব্যবহার
বাস্তব জীবনের ব্যবহারের ক্ষেত্রে, কাফকা বার্তার মূল কী আপনার কার্যকারিতা এবং আপনার ব্যবসায়ের যুক্তির সুস্পষ্টতার উপর বিশাল প্রভাব ফেলতে পারে।
উদাহরণস্বরূপ একটি কী আপনার ডেটা বিভাজনের জন্য প্রাকৃতিকভাবে ব্যবহার করা যেতে পারে। যেহেতু আপনি আপনার ভোক্তাদের নির্দিষ্ট পার্টিশন থেকে পড়তে নিয়ন্ত্রণ করতে পারেন এটি একটি দক্ষ ফিল্টার হিসাবে পরিবেশন করতে পারে। এছাড়াও, কীটিতে বার্তার আসল মূল্য সম্পর্কে কিছু মেটা ডেটা অন্তর্ভুক্ত থাকতে পারে যা আপনাকে পরবর্তী প্রক্রিয়াজাতিকে নিয়ন্ত্রণ করতে সহায়তা করে। কীগুলি সাধারণত মানগুলির চেয়ে ছোট হয় এবং তাই পুরো মানের পরিবর্তে একটি কী পার্স করা আরও সুবিধাজনক। একই সাথে, আপনি সমস্ত সিরিয়ালাইজেশন এবং স্কিমা রেজিস্ট্রেশন আপনার মান সহ কী হিসাবেও প্রয়োগ করতে পারেন।
একটি নোট হিসাবে, শিরোনামের ধারণাটিও রয়েছে যা তথ্য সঞ্চয় করতে, ডকুমেন্টেশন দেখুন ।