没有密钥序列化程序的Kafka Producer

时间:2019-04-15 07:20:40

标签: apache-kafka serializer

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

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

当配置了实际上没有使用的随机设置时,我感到困惑。

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

2 个答案:

答案 0 :(得分: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 :(得分:1)

Kafka代理存储字节数组。因此,我认为您必须序列化。

来自生产者的主题消息应转换为字节数组(字节流,字节流)并存储在代理的分区中。然后将其反序列化以供消费者使用。

消息是键值对。因此,键和值都是必需的。

enter image description here