বার্তাটির প্রক্রিয়া ব্যর্থ হলে আবার একই বার্তা গ্রহণ করুন


10

আমি কনফ্লুয়েন্ট.কাফকা। নেট ক্লায়েন্ট সংস্করণ 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করেও, আমি পরবর্তী অনির্বাচিত বার্তাগুলি পেতে থাকি।

আমার মনে হচ্ছে আমি এখানে মৌলিক কিছু অনুপস্থিত, তবে কী বুঝতে পারি না। কোন সাহায্য প্রশংসা করা হয়!


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

আপনি অফসেট করার চেষ্টা না করা অবধি বার্তাগুলি পুনরায় পাঠানো হবে না। এটি গ্রাহককে প্রভাবিত করবে এবং বার্তাগুলি অফসেট সন্ধান থেকে ফিরে আসবে।
সাগর বীরম

@ user2683814 আমার পোস্টে আমি EnableAutoCommitসেট করা আছে তার উপর নির্ভর করে দুটি পরিস্থিতি উল্লেখ করেছি । ধরা যাক আমাদের আছে EnableAutoCommit = false, এবং আমি যখন আমি Consumeঅফসেট ১১ দিয়ে বার্তাটি ফিরে পাই তখন আমি বার বার প্রসেসটি চালিয়ে যেতে থাকি এবং বার বার অফসেটের সাথে একই বার্তাটি পাওয়া চালিয়ে যাব বলে আশা করি Commit
হাভিজ

না, ঘটনাটি নয়। আপনি ইতিমধ্যে বিষয় প্রকাশের পরে কী কী জরিপ করবেন তা Consumeব্যবহার করে আপনি নিয়ন্ত্রণ করতে পারবেন না the দৃশ্যের পিছনে কাফকা (যেমন ক্লায়েন্ট ল্যাব হিসাবে) এটি অ্যাপ্লিকেশনটিতে প্রেরিত সমস্ত অফসেটগুলি বজায় রাখে এবং এটি তাদের রৈখিকভাবে প্রেরণ করবে। সুতরাং কোনও ব্যর্থতার দৃশ্যের মতো কোনও বার্তা পুনঃপ্রক্রিয়া করার জন্য আপনাকে সেগুলি আপনার কোডে ট্র্যাক করতে হবে এবং বার্তাটি অফসেট করতে হবে এবং ম্যাসেজটি প্রক্রিয়াজাতকরণ শুরু করতে হবে এবং পূর্বের অনুরোধগুলিতে ইতিমধ্যে প্রক্রিয়া করা থাকলে কী এড়াতে হবে তাও আপনার জানা উচিত। আমি নেট নেট লাইব্রেরিটির সাথে পরিচিত নই তবে এটি কাফকার ডিজাইনের কারণে এটি সত্যিকার অর্থে গুরুত্বপূর্ণ নয়। CommitSubscribeConsume
সাগর বীরম

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

উত্তর:


0

দুঃখিত আমি মন্তব্য যোগ করতে পারেন না। কাফকা গ্রাহকরা ব্যাচগুলিতে বার্তা গ্রহন করেন, তাই আপনি এখনও পটভূমির থ্রেড দ্বারা প্রাইভেট করা ব্যাচটি দিয়ে পুনরাবৃত্তি করতে পারেন

আপনার গ্রাহক সত্যই অফসেট প্রতিশ্রুতিবদ্ধ কিনা বা কাফকা ইউজ ব্যবহার না করে তা পরীক্ষা করতে পারেন kafka-consumer-groups.sh

kafka-consumer-groups.sh --bootstrap-server kafka-host:9092 --group consumer_group  --describe

0

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

যদি সেই 5 টি পুনরায় প্রচেষ্টার মধ্যে কোনও বার্তার প্রসেসিং সফল হয় তবে আপনি পরবর্তী বার্তায় কাতারে যেতে পারেন।

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