আমি কনফ্লুয়েন্ট.কাফকা। নেট ক্লায়েন্ট সংস্করণ 1.3.0 ব্যবহার করছি। আমি ডক্স অনুসরণ করছি :
var consumerConfig = new ConsumerConfig
{
BootstrapServers = "server1, server2",
AutoOffsetReset = AutoOffsetReset.Earliest,
EnableAutoCommit = true,
EnableAutoOffsetStore = false,
GroupId = this.groupId,
SecurityProtocol = SecurityProtocol.SaslPlaintext,
SaslMechanism = SaslMechanism.Plain,
SaslUsername = this.kafkaUsername,
SaslPassword = this.kafkaPassword,
};
using (var consumer = new ConsumerBuilder<Ignore, string>(consumerConfig).Build())
{
var cancellationToken = new CancellationTokenSource();
Console.CancelKeyPress += (_, e) =>
{
e.Cancel = true;
cancellationToken.Cancel();
};
consumer.Subscribe("my-topic");
while (true)
{
try
{
var consumerResult = consumer.Consume();
// process message
consumer.StoreOffset(consumerResult);
}
catch (ConsumeException e)
{
// log
}
catch (KafkaException e)
{
// log
}
catch (OperationCanceledException e)
{
// log
}
}
}
সমস্যাটি হ'ল আমি লাইনটি মন্তব্য করলেও consumer.StoreOffset(consumerResult);, পরের বার আমি গ্রাহক হওয়ার পরে আমি পরবর্তী অনির্বাচিত বার্তাটি পেয়ে যাচ্ছি , অর্থাৎ অফসেটটি বাড়তে থাকে যা ডকুমেন্টেশন দাবি করে যা তা বলে না বলে মনে হয়, কমপক্ষে একটি ডেলিভারি ।
এমনকি যদি আমি EnableAutoCommit = falseকনফিগার থেকে 'সক্ষম অটোআফসেটস্টোর = মিথ্যা' সেট করে এবং অপসারণ করি এবং এর consumer.StoreOffset(consumerResult)সাথে প্রতিস্থাপন consumer.Commit()করি, তখনও আমি একই আচরণ দেখতে পাচ্ছি, যেমন আমি মন্তব্য না Commitকরেও, আমি পরবর্তী অনির্বাচিত বার্তাগুলি পেতে থাকি।
আমার মনে হচ্ছে আমি এখানে মৌলিক কিছু অনুপস্থিত, তবে কী বুঝতে পারি না। কোন সাহায্য প্রশংসা করা হয়!
EnableAutoCommitসেট করা আছে তার উপর নির্ভর করে দুটি পরিস্থিতি উল্লেখ করেছি । ধরা যাক আমাদের আছে EnableAutoCommit = false, এবং আমি যখন আমি Consumeঅফসেট ১১ দিয়ে বার্তাটি ফিরে পাই তখন আমি বার বার প্রসেসটি চালিয়ে যেতে থাকি এবং বার বার অফসেটের সাথে একই বার্তাটি পাওয়া চালিয়ে যাব বলে আশা করি Commit।
Consumeব্যবহার করে আপনি নিয়ন্ত্রণ করতে পারবেন না the দৃশ্যের পিছনে কাফকা (যেমন ক্লায়েন্ট ল্যাব হিসাবে) এটি অ্যাপ্লিকেশনটিতে প্রেরিত সমস্ত অফসেটগুলি বজায় রাখে এবং এটি তাদের রৈখিকভাবে প্রেরণ করবে। সুতরাং কোনও ব্যর্থতার দৃশ্যের মতো কোনও বার্তা পুনঃপ্রক্রিয়া করার জন্য আপনাকে সেগুলি আপনার কোডে ট্র্যাক করতে হবে এবং বার্তাটি অফসেট করতে হবে এবং ম্যাসেজটি প্রক্রিয়াজাতকরণ শুরু করতে হবে এবং পূর্বের অনুরোধগুলিতে ইতিমধ্যে প্রক্রিয়া করা থাকলে কী এড়াতে হবে তাও আপনার জানা উচিত। আমি নেট নেট লাইব্রেরিটির সাথে পরিচিত নই তবে এটি কাফকার ডিজাইনের কারণে এটি সত্যিকার অর্থে গুরুত্বপূর্ণ নয়। CommitSubscribeConsume