kafka生产者错误:“未指定值序列化程序,并且没有为类型定义默认序列化程序…”

6ovsh4lw  于 2021-06-04  发布在  Kafka
关注(0)|答案(1)|浏览(408)

我刚开始使用Kafka,遇到了以下新手错误:

'Value cannot be null.
Parameter name: Value serializer not specified and there is no default serializer defined for type ActMessage.'

当试图发送一个类对象actmessage object,而不是示例附带的一个简单字符串时,就会发生这种情况。引发错误的代码行是:

using (var p = new ProducerBuilder<Null, ActMessage>(config ).Build()

我正在使用.net客户端。
我的理解是,我需要在第一个类型参数中使用一个默认的序列化,这是kafka客户机附带的,如这里所述,但是在这个.net包中找不到它们。我想我可以造一个,但那是浪费时间。
这里有一个可复制的例子:

public class ActMessage  {
    public int SomeId {get;set;}
    public string SomeContent {get;set;}
}

class Tester  {

void send(){

    var config = new ProducerConfig { BootstrapServers = "localhost:9092" };

        using (var p = new ProducerBuilder<Null, ActMessage>(config).Build()) //throws error here
        {
            var dr = p.ProduceAsync("news", new Message<Null, ActMessage>
            {
                Value = new ActMessage { SomeId = 1, SomeContent="hi" },
            }
                ).Result;
        }
    }
}
s4chpxco

s4chpxco1#

我建议去看看工作间 examples/ dir来查看可以复制到自己项目中的工作代码。
假设你想用avro
你会用 schemagen 创建类,而不是手动编写。
那你一定要加一些 ValueSerializer 在Kafka客户端中以发送数据

相关问题