didi / KnowStreaming

一站式云原生实时流数据平台,通过0侵入、插件化构建企业级Kafka服务,极大降低操作、存储和管理实时流数据门槛
https://knowstreaming.com
GNU Affero General Public License v3.0
6.93k stars 1.28k forks source link

BrokerConfigServiceImpl类中的getBrokerConfigByZKClient方法一定返回空列表 #1086

Closed myloverwdm closed 9 months ago

myloverwdm commented 1 year ago
    private Result<List<KafkaConfigDetail>> getBrokerConfigByZKClient(VersionItemParam itemParam) {
        BrokerParam param = (BrokerParam) itemParam;
        Result<Properties> propertiesResult = this.getBrokerConfigByZKClient(param.getClusterPhyId(), param.getBrokerId());
        if (propertiesResult.failed()) {
            return Result.buildFromIgnoreData(propertiesResult);
        }
        return Result.buildSuc(KafkaConfigConverter.convert2KafkaBrokerConfigDetailList(
                new ArrayList<>(),
                propertiesResult.getData()
        ));
    }

public static List<KafkaConfigDetail> convert2KafkaBrokerConfigDetailList(List<String> configNameList, Properties properties) {
        List<KafkaConfigDetail> configList = new ArrayList<>();
        for (String configName: configNameList) {
            KafkaConfigDetail config = new KafkaConfigDetail();
            config.setName(configName);
            config.setValue(properties.getProperty(configName));
            config.setConfigSource(DescribeConfigsResponse.ConfigSource.TOPIC_CONFIG.ordinal());

            ConfigDef.ConfigKey configKey = KafkaConstant.KAFKA_ALL_CONFIG_DEF_MAP.get(configName);
            if (configKey != null) {
                config.setDocumentation(configKey.documentation);
                config.setDefaultValue(configKey.defaultValue == null? "": configKey.defaultValue.toString());
                config.setOverride(config.getValue() != null && config.getValue().equals(configKey.defaultValue));
                config.setConfigType(configKey.type.ordinal());
            } else {
                config.setDocumentation(null);
                config.setDefaultValue(null);
                config.setOverride(null);
                config.setConfigType(null);
            }

            config.setSensitive(null);
            config.setReadOnly(null);
            configList.add(config);
        }

        return configList;
    }

在getBrokerConfigByZKClient方法中,调用KafkaConfigConverter.convert2KafkaBrokerConfigDetailList,传递第一个参数为空列表,KafkaConfigConverter.convert2KafkaBrokerConfigDetailList方法中对该列表进行遍历,然后返回,而参数为空列表是写死的,故该方法一定返回空列表,且KafkaConfigConverter.convert2KafkaBrokerConfigDetailList方法仅有该处使用到。

另:getBrokerConfigByZKClient方法中的代码: for (Object key: properties.keySet()) { properties.getProperty((String) key); } 不清楚该代码的目的是什么。校验所有的key都要是String类型,若不是String则强转失败吗?与之相同问题的还有TopicConfigServiceImpl类中的getTopicConfigByZKClient方法

jiangminbing commented 10 months ago

1700928661311 我对比了TopicConfigServiceImpl,BrokerConfigServiceImpl,这两个文件中的处理方法,和KafkaConfigConverer中convert2KafkaBrokerConfigDetailList,convert2KafkaTopicConfigDetailList 我的理解getBrokerConfigByZKClient中new ArrayList()的入参替换成kafka broker 的配置列表,处理方式是否是这里来处理的?

ZQKC commented 10 months ago

1700928661311 我对比了TopicConfigServiceImpl,BrokerConfigServiceImpl,这两个文件中的处理方法,和KafkaConfigConverer中convert2KafkaBrokerConfigDetailList,convert2KafkaTopicConfigDetailList 我的理解getBrokerConfigByZKClient中new ArrayList()的入参替换成kafka broker 的配置列表,处理方式是否是这里来处理的?

是的

jiangminbing commented 10 months ago

1701009369609 维护成类似TopicConfig0100这种配置的类信息?但是没找到相关BrokerConfig相关的信息?是否有指引类?

jiangminbing commented 10 months ago

图片 我理解应该是把配置的key值作为参数传入,如果是的这个问题我来处理吧