【问题标题】:What does Deserialization of key mean in Consumer class in Confluent Kafka?Confluent Kafka的消费者类中密钥的反序列化是什么意思?
【发布时间】:2018-10-08 10:50:52
【问题描述】:

confluent kafka 文档说,一个 Consumer 类的定义如下:

Class Consumer<TKey, TValue> 

上面的消费者类实现了一个高级的 Apache Kafka 消费者(具有键和值反序列化)。

我了解 TKey 和 TValue 用于反序列化从生产者发送的密钥。例如,像

从生产者那里发送一个密钥看起来像

var deliveryReport = producer.ProduceAsync(topicName, key, val);

在消费者端接收字符串键看起来像

using (var consumer = new Consumer<Ignore, string>(constructConfig(brokerList, false), null, new StringDeserializer(Encoding.UTF8)))
{
    consumer.Subscribe(topics);

    Console.WriteLine($"Started consumer, Ctrl-C to stop consuming");

    var cancelled = false;
    Console.CancelKeyPress += (_, e) => {
        e.Cancel = true; // prevent the process from terminating.
        cancelled = true;
    };

    while (!cancelled)
    {
        Message<Ignore, string> msg;
        if (!consumer.Consume(out msg, TimeSpan.FromMilliseconds(100)))
        {
            continue;
        }

        Console.WriteLine($"Topic: {msg.Topic} Partition: {msg.Partition} Offset: {msg.Offset} {msg.Value}");
    }
}

因为我们传入一个key,所以Consumer被初始化为

Consumer<Ignore, string>

消息被初始化为

Message<Ignore, String>

毕竟,我的问题是,密钥的反序列化真正意味着什么?为什么我们需要这样做?还有,为什么我们需要传入一个键值对Ignore, String来进行反序列化?

【问题讨论】:

    标签: c# apache-kafka kafka-consumer-api confluent-platform


    【解决方案1】:

    为什么我们需要传入一个键值对Ignore, String来进行反序列化?

    您无需传递这些特定设置。您需要匹配生产者的设置。或者,如果您不确定,您可以为键和值提供字节数组对象。

    如果生产者没有发送密钥,例如 null,则没有什么可以反序列化。我认为这就是 Ignore 类的用途。请注意,您没有提供键 Deserializer 类,而是为值提供了

    null, new StringDeserializer(Encoding.UTF8))
    

    所有 Kafka 消息都包含键值对,仅作为字节。生产者使用序列化器,作为消费者,您需要反序列化。理想情况下,您将消息反序列化为实际对象,例如字符串或 JSON 对象或 Avro、Protobuf 等。

    默认情况下,键决定了您将从哪个主题分区中消费消息。空键将均匀分布在主题中。否则,生产者应用程序可以定义自己的分区器并在其逻辑决定的任何地方发送数据

    【讨论】:

    • 这有点不准确。密钥不一定确定分区。 Kafka 生产者的默认分区器为此使用密钥,但完全由生产者为每条消息选择分区,这可能会完全忽略密钥。
    猜你喜欢
    • 2019-05-11
    • 2021-08-22
    • 2018-12-08
    • 2019-04-29
    • 1970-01-01
    • 1970-01-01
    • 2019-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多