消费者在Confluent.Kafka中的交易

时间:2019-06-30 06:48:12

标签: c# apache-kafka confluent-kafka

我正在使用Apache Kafka作为消息处理器,并在Asp.Net Core中将 Confluent.Kafka 用作使用者。

我想使用消息并将其保存在数据库中,显然,我需要在Queue中进行提交或回滚消息的事务

我正在使用该库的示例,如下代码:

import xml.etree.ElementTree as ET

xml = '''<root>
<item name="A" days="10"/>
<item name="B" days="20"/>
</root>'''


def change_days_value(factor):
    root = ET.fromstring(xml)
    items = root.findall('.//item')
    for item in items:
        item.attrib['days'] = str(int(item.attrib['days']) * factor)
    ET.dump(root)


# read this value from the user
factor = 1.1
change_days_value(factor)

我该怎么办?

1 个答案:

答案 0 :(得分:1)

默认情况下,Kafka消费者“在后台自动并定期提交偏移量”-这种行为由两个配置参数定义:EnableAutoCommitAutoCommitIntervalMs

在您的情况下,需要手动进行提交:

var conf = new ConsumerConfig
{
    // ..
    EnableAutoCommit = false // <-----
};


// ..

    try
    {
        var cr = c.Consume(cts.Token);

        // .. save data to database ..

        c.Commit(); // <-----

        Console.WriteLine($"Consumed message '{cr.Value}' at: '{cr.TopicPartitionOffset}'.");
    }
    catch (ConsumeException e)
    {
        Console.WriteLine($"Error occured: {e.Error.Reason}");
    }