华为fusioninsight集群kafka连接配置

1.在application.propertie新增如下配置:

fusioninsight.kafka.bootstrap-servers= ${KAFKA_URL:10.7.212.111:9200}
fusioninsight.kafka.security.protocol= SASL_PLAINTEXT
fusioninsight.kafka.kerberos.domain.name= hadoop.hadoop.com
fusioninsight.kafka.sasl.kerberos.service.name= kafka
kerberos.jaas=${JAAS_PATH:E:\demo\huawei\\jaas.conf}
kerberos.krb5=${KRB5_PATH:E:\demo\huawei\\krb5.conf}

2.新增kafka配置

@Configuration
@Slf4j
public class PlatformConsumerConfig {

    @Bean(name = "authKafkaContainerFactory")
    public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaListenerContainerFactory() {
        ConcurrentKafkaListenerContainerFactory<String, String> factory = new ConcurrentKafkaListenerContainerFactory<>();
        factory.setConsumerFactory(consumerFactory());
        factory.setConcurrency(10);
        ContainerProperties properties = factory.getContainerProperties();
        properties.setMissingTopicsFatal(false);
        properties.setPollTimeout(1500);
        //设置kafka监听工厂禁止自启动
        factory.setAutoStartup(false);
        factory.setBatchListener(true);
        return factory;
    }

    @Bean
    public PlatformListener platformListener() {
        return new PlatformListener();
    }

    public ProducerFactory<String, String> producerFactory() {
        return new DefaultKafkaProducerFactory<>(producerConfigs());
    }

    @Value("${fusioninsight.kafka.bootstrap-servers}")
    public String boostrapServers;

    @Value("${fusioninsight.kafka.security.protocol}")
    public String securityProtocol;

    @Value("${fusioninsight.kafka.kerberos.domain.name}")
    public String kerberosDomainName;

    @Value("${fusioninsight.kafka.sasl.kerberos.service.name}")
    public String kerberosServiceName;

    @Value("${kerberos.krb5}")
    private String kerberoskrb5;

    @Value("${kerberos.jaas}")
    private String kerberosJaas;

    @Bean
    public RecordMessageConverter converter() {
        return new StringJsonMessageConverter();
    }

    
    @Bean
    public KafkaAdmin kafkaAdmin() {
        Map<String, Object> configs = new HashMap<>();
        configs.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, boostrapServers);
        configs.put(AdminClientConfig.SECURITY_PROTOCOL_CONFIG, securityProtocol);
        configs.put("sasl.kerberos.service.name", kerberosServiceName);
        configs.put("kerberos.domain.name", kerberosDomainName);
        return new KafkaAdmin(configs);
    }

    @Bean
    public ConsumerFactory<Object, Object> consumerFactory() {
        Map<String, Object> configs = new HashMap<>();
        configs.put("security.protocol", securityProtocol);
        configs.put("kerberos.domain.name", kerberosDomainName);
        configs.put("bootstrap.servers", boostrapServers);
        configs.put("sasl.kerberos.service.name", kerberosServiceName);
        configs.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        configs.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        return new DefaultKafkaConsumerFactory<>(configs);
    }

    @Bean
    public KafkaTemplate<String, String> kafkaTemplate() {
        Map<String, Object> configs = new HashMap<>();
        configs.put("sasl.kerberos.service.name", kerberosServiceName);
        configs.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        configs.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        configs.put("security.protocol", securityProtocol);
        configs.put("kerberos.domain.name", kerberosDomainName);
            configs.put("bootstrap.servers", boostrapServers);
            // 这里开始认证 使用自己配置的文件路径
            System.setProperty("java.security.auth.login.config", kerberosJaas);
            System.setProperty("java.security.krb5.conf", kerberoskrb5);
            log.info("---kerberos on kafka use default--"+ "jaas:" + System.getProperty("java.security.auth.login.config") + " krb5:" + System.getProperty("java.security.krb5.conf"));
            ProducerFactory<String, String> producerFactory = new DefaultKafkaProducerFactory<>(configs);
            return new KafkaTemplate<>(producerFactory);
    }


}

3.使用

@Autowired
private KafkaTemplate<String, String> kafkaTemplate;
dataMessageVO.setAccountList(accountList);
messageSend2KafkaVo.setData(dataMessageVO);
messageSend2KafkaVo.setType("account");
log.info("--message to kafka for account:-->" + JSON.toJSONString(messageSend2KafkaVo));
ProducerRecord<String, String> record = new ProducerRecord<String, String>("asset_rep", JSON.toJSONString(messageSend2KafkaVo));
Object o = kafkaTemplate.send(record).get();
log.info("--message to kafka for account result2:--->" + o.toString());

  • 7
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
使用Spring Kafka发送华为云ROMA Connect Kafka消息可以按照以下步骤进行: 1. 首先,确保已经在项目中引入了Spring Kafka的依赖。可以在项目的pom.xml文件中添加以下依赖: ```xml <dependency> <groupId>org.springframework.kafka</groupId> <artifactId>spring-kafka</artifactId> <version>2.8.0</version> </dependency> ``` 2. 在Spring Boot的配置文件中,配置Kafka连接信息。可以在application.properties或application.yml文件中添加以下配置: ```properties spring.kafka.bootstrap-servers=<kafka-bootstrap-servers> spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer ``` 其中,`<kafka-bootstrap-servers>`是华为云ROMA Connect Kafka的bootstrap servers地址。 3. 创建一个KafkaProducer的Bean,用于发送消息。可以在Spring Boot的配置类中添加以下代码: ```java import org.apache.kafka.clients.producer.ProducerConfig; import org.apache.kafka.common.serialization.StringSerializer; import import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.kafka.core.DefaultKafkaProducerFactory; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.kafka.core.ProducerFactory; import java.util.HashMap; import java.util.Map; @Configuration public class KafkaConfig { @Bean public ProducerFactory<String, String> producerFactory() { Map<String, Object> configProps = new HashMap<>(); configProps.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "<kafka-bootstrap-servers>"); configProps.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class); configProps.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class); return new DefaultKafkaProducerFactory<>(configProps); } @Bean public KafkaTemplate<String, String> kafkaTemplate() { return new KafkaTemplate<>(producerFactory()); } } ``` 其中,`<kafka-bootstrap-servers>`是华为云ROMA Connect Kafka的bootstrap servers地址。 4. 在需要发送消息的地方,注入KafkaTemplate,并使用它发送消息。可以在任何Spring管理的Bean中注入KafkaTemplate,并调用其`send()`方法发送消息。以下是一个示例: ```java import org.springframework.beans.factory.annotation.Autowired; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Component; @Component public class KafkaMessageSender { private final KafkaTemplate<String, String> kafkaTemplate; @Autowired public KafkaMessageSender(KafkaTemplate<String, String> kafkaTemplate) { this.kafkaTemplate = kafkaTemplate; } public void sendMessage(String topic, String message) { kafkaTemplate.send(topic, message); } } ``` 在上述示例中,`KafkaMessageSender`类注入了`KafkaTemplate`,并提供了一个`sendMessage()`方法用于发送消息。 这样,你就可以使用Spring Kafka发送华为云ROMA Connect Kafka消息了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

焱童鞋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值