В соответствующей документации 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}");
}
}
Поскольку мы передаем ключ, Потребитель инициализируется как
Consumer<Ignore, string>
и сообщение инициализируется как
Message<Ignore, String>
После всего этого, мой вопрос: что на самом деле означает десериализация ключа ? И зачем нам это делать? Кроме того, зачем нам нужно передавать пару ключ-значение Ignore, String для выполнения десериализации?