Kafka中Serializer<T>接口的configs参数含义及来源是什么?
你在构造KafkaProducer实例时传入的全量配置集合,就是Serializer#configure方法接收的Map参数来源。
具体运行逻辑如下:
- 初始化生产者时,你会把所有配置(包括
bootstrap.servers、acks等基础配置,以及你自定义的序列化器专属配置)封装为Map传入KafkaProducer构造方法 - KafkaProducer完成指定的键/值序列化器实例化后,会自动调用该序列化器的
configure方法,将自身持有的全量配置Map原封不动传入,方法的第二个布尔参数用于标识当前序列化器的用途:true对应键序列化器,false对应值序列化器
官方文档对该方法的定义描述为:使用给定的键值对配置当前类,第二个入参标识该序列化器是否用于序列化消息键。
举个实际使用示例:
Map<String, Object> producerConfig = new HashMap<>(); // 内置基础配置 producerConfig.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "127.0.0.1:9092"); producerConfig.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, CustomSerializer.class); producerConfig.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, CustomSerializer.class); // 自定义序列化器专属配置 producerConfig.put("custom.serializer.charset", "GBK"); producerConfig.put("custom.serializer.enable-compress", true); // 初始化生产者时,会自动把上面的全量配置传入序列化器的configure方法 KafkaProducer<String, String> producer = new KafkaProducer<>(producerConfig);
你在自定义CustomSerializer的configure方法中,可以直接从传入的Map里读取上述自定义配置项完成初始化逻辑。
内容的提问来源于stack exchange,提问作者negimaster
相关产品推荐
相关产品推荐

