Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache kafka 使用MassTransit和Kafka配置Avro_Apache Kafka_Avro_Masstransit_Confluent Kafka Dotnet - Fatal编程技术网

Apache kafka 使用MassTransit和Kafka配置Avro

Apache kafka 使用MassTransit和Kafka配置Avro,apache-kafka,avro,masstransit,confluent-kafka-dotnet,Apache Kafka,Avro,Masstransit,Confluent Kafka Dotnet,如何配置MassTransit在生成和使用合流的卡夫卡主题时使用Avro进行序列化/反序列化?我看到Avro序列化程序/反序列化程序在包Confluent.SchemaRegistry.Serdes中。欢迎使用一些代码示例。要将MassTransit配置为使用Avro,我的做法是使用生成的类文件(avrogen),然后配置生产者和主题端点,如下所示: 首先,需要为架构注册表创建客户端: var schemaRegistryClient = new CachedSchemaRegistryClie

如何配置MassTransit在生成和使用合流的卡夫卡主题时使用Avro进行序列化/反序列化?我看到Avro序列化程序/反序列化程序在包
Confluent.SchemaRegistry.Serdes
中。欢迎使用一些代码示例。

要将MassTransit配置为使用Avro,我的做法是使用生成的类文件(
avrogen
),然后配置生产者和主题端点,如下所示:

首先,需要为架构注册表创建客户端:

var schemaRegistryClient = new CachedSchemaRegistryClient(new Dictionary<string, string>
{
    {"schema.registry.url", "localhost:8081"},
});
var schemaRegistryClient=new CachedSchemaRegistryClient(新字典)
{
{“schema.registry.url”,“localhost:8081”},
});
然后,您可以配置骑手:

services.AddMassTransit(x =>
{
    x.UsingInMemory((context, cfg) => cfg.ConfigureEndpoints(context));
    x.AddRider(rider =>
    {
        rider.AddConsumer<KafkaMessageConsumer>();

        rider.AddProducer<string, KafkaMessage>(Topic, context => context.MessageId.ToString())
            .SetKeySerializer(new AvroSerializer<string>(schemaRegistryClient).AsSyncOverAsync())
            .SetValueSerializer(new AvroSerializer<KafkaMessage>(schemaRegistryClient).AsSyncOverAsync());

        rider.UsingKafka((context, k) =>
        {
            k.Host("localhost:9092");

            k.TopicEndpoint<string, KafkaMessage>("topic-name", "consumer-group", c =>
            {
                c.SetKeyDeserializer(new AvroDeserializer<string>(schemaRegistryClient).AsSyncOverAsync());
                c.SetValueDeserializer(new AvroDeserializer<KafkaMessage>(schemaRegistryClient).AsSyncOverAsync());
                c.AutoOffsetReset = AutoOffsetReset.Earliest;
                c.ConfigureConsumer<KafkaMessageConsumer>(context);

                c.CreateIfMissing(m =>
                {
                    m.NumPartitions = 2;
                });
            });
        });
    });
});
services.AddMassTransit(x=>
{
x、 UsingInMemory((context,cfg)=>cfg.ConfigureEndpoints(context));
x、 AddRider(rider=>
{
rider.AddConsumer();
rider.AddProducer(主题,上下文=>context.MessageId.ToString())
.SetKeySerializer(新的AvroSerializer(SchemaRegistrCyclient).AssynCoverageSync())
.SetValueSerializer(新的AvroSerializer(SchemaRegistrCyclient).AsSyncOverAsync());
使用卡夫卡((上下文,k)=>
{
k、 主机(“本地主机:9092”);
k、 TopicEndpoint(“主题名称”、“消费者群体”,c=>
{
c、 SetKeyDeserializer(新的AvroDeserializer(SchemaRegistrCyclient).AsSyncOverAsync());
c、 SetValueDeserializer(新的AvroDeserializer(SchemaRegistrCyclient).AsSyncOverAsync());
c、 AutoOffsetReset=AutoOffsetReset.Earlime;
c、 配置消费者(上下文);
c、 CreateIfMissing(m=>
{
m、 NumPartitions=2;
});
});
});
});
});
您可以查看a以查看更多详细信息。我可能应该将此添加到文档中

我写这篇文章是为了回答这个问题,直到一小时前我才使用过Avro


而且,我过去经常把事情安排好并运转起来。链接单元测试项目中的
docker compose.yml
配置了所有必需的服务。

注意:与其使用
AvroSerializer
,不如使用StringSerializerTanks作为提示,实际上我正计划将密钥转换成更复杂的东西,比如字典,我可以用来存储标题或其他东西。大概无论如何,谢谢:)好吧,卡夫卡记录本身确实允许关键字/值之外的标题。但不确定dotnet客户端/masstransit是否允许访问这些数据