我正在使用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)
我该怎么办?
答案 0 :(得分:1)
默认情况下,Kafka消费者“在后台自动并定期提交偏移量”-这种行为由两个配置参数定义:EnableAutoCommit和AutoCommitIntervalMs。
在您的情况下,需要手动进行提交:
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}");
}