Kafka-Net中产生的消息中没有时间戳

时间:2019-03-06 17:10:20

标签: c# apache-kafka kafka-producer-api

我正在使用Kafka-Net nuget软件包为Kafka生产和消费做基本的POC。

但是,我的问题是它发布到该主题的消息似乎没有任何时间戳(在Kafka Tool最新版本中查看)。这是因为尚未更新Kafka-Net软件包以支持在较新版本的Kafka中处理时间戳的方式吗?我需要切换到使用Confluent Kafka吗?

消息以正确的偏移量和有效负载附加到主题,它们只是空白的时间戳。

这是我的代码

using System;
using System.Collections.Generic;
using System.Configuration;
using KafkaNet;
using KafkaNet.Model;
using KafkaNet.Protocol;

namespace KafkaProducer
{
    class Program
    {
        static void Main(string[] args)
        {
            var brokerUri = ConfigurationManager.AppSettings["BrokerUri"];

            Console.WriteLine("Enter the topic name to publish to");
            var topicName = Console.ReadLine();

            Console.WriteLine();
            Console.WriteLine($"Now publishing to topic {topicName}, enter messages separated by a carriage return");
            Console.WriteLine();

            var uri = new Uri(brokerUri);
            var options = new KafkaOptions(uri);
            var router = new BrokerRouter(options);
            var client = new Producer(router);

            while (true)
            {
                var payload = Console.ReadLine();
                if (payload == "exit") break;
                var msg = new Message(payload);                
                client.SendMessageAsync(topicName, new List<Message> { msg }).GetAwaiter().GetResult();
            }
        }
    }
}

1 个答案:

答案 0 :(得分:0)

在Kafka中,消息的时间戳使用属性 message.timestamp.type [CreateTime,LogAppendTime] 提供,该属性可以在生产者级别或主题级别设置。

消费者在看到消息时将看到消息时间戳。

如果要在生产者级别设置此属性,则需要在Kafka-net API中进行检查。

https://kafka.apache.org/documentation/#topicconfigs