没有密钥序列化器的Kafka Producer

问题描述 投票:0回答:2

我有一个kafka生产者,我不需要序列化一个键,只需要值。但是生产者配置需要“key.serializer”设置。

Map<String, Object> producerConfig = new HashMap<>();
producerConfig.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class);

当配置了一个实际上没有使用的随机设置时,我觉得很困惑。

有没有办法不设置“key.serializer”设置来表示没有密钥序列化?

apache-kafka serializer
2个回答
1
投票

没有选项可以指示密钥将是null并且不需要key.serializer

KafkaProducer不知道将传递的ProducerRecord是否具有密钥和/或值被设置为null,因此必须通过序列化器。

没有密钥就无法发送消息。即使您使用以下构造函数:ProducerRecord(String topic, V value)。在幕后,它设置了一个关键(null):

public ProducerRecord(String topic, V value) {
    this(topic, null, null, null /* key */, value, null);
}

1
投票

Kafka代理存储字节数组。所以我认为你必须序列化。

来自生产者的主题消息应该转换为字节数组(字节流,字节流)并存储在代理的分区中。然后它被反序列化去消费者。

而消息是一个关键的价值对。所以关键和价值都是必需的。

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.