使用 CSharp 在 Kafka 中自定义序列化

Sas*_*adi 2 .net c# serialization apache-kafka customserializer

我想在 CSharp 中为 kafka 编写一个自定义序列化程序。我搜索了很多,但没有找到关于如何用 dotnet 语言为 kafka 编写自定义序列化程序的好参考。

关于如何编写一个以及如何做到这一点的任何想法?

Sas*_*adi 6

我只是找到了这个问题的答案。在 dotnet 中用于 kafka 的库由 confluent 提供。

卡夫卡.NET客户端

应该有一个实现接口的序列化类:

Confluent.Kafka.ISerializer<T>
Run Code Online (Sandbox Code Playgroud)

通常我们应该通过 ProducerBuilder 类创建生产者:

Confluent.Kafka.ProducerBuilder<TKey, TValue>
Run Code Online (Sandbox Code Playgroud)

此类有一个方法可以为键和值设置序列化程序。它与 Kafka 中自定义序列化器的原始文档略有不同,后者指示在生产者配置中设置自定义序列化器类的名称。

以下是设置值序列化器的代码:

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

var producerBuilder = new ProducerBuilder<Null, Customer>(config);
producerBuilder.SetValueSerializer(new CustomerSerializer());       // <------ The Magic Code
var producer = producerBuilder.Build();
Run Code Online (Sandbox Code Playgroud)

Serialization 类的示例代码是这样的;

public class CustomerSerializer : Confluent.Kafka.ISerializer<Customer>
{
    public byte[] Serialize(Customer data, SerializationContext context)
    { ..........}
}
Run Code Online (Sandbox Code Playgroud)

在我的示例中,Customer 类没有什么重要的,它是一个普通的类,只是为了保存客户属性。

在序列化类中,你应该在 Serialize 方法中返回一个 byte[] ,这是显而易见的!

我希望这对使用 dotnet 实现 Kafka 的人有用。