kafka的配置和使用

kafka是一款消息中间件。可以帮助我们消费和发送消息。可以做数据同步。

首先kafka需要导入pom文件
在这里插入图片描述
然后需要kafka的核心config如下
@Configuration
@Slf4j
public class KafkaTemplateConfig {

@Value("${kafka.archive.servers}")
private String KAFKA_SERVERS;

@Value("${kafka.archive.group}")
private String GROUPID;

@Value("${kafka.thread.number}")
private Integer threadNum=5;


@Bean
public KafkaTemplate<String, String> kafkaTemplate() {
    return new KafkaTemplate<>(producerFactory());
}

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


@Bean
public Map<String, Object> producerConfigs() {
    Map<String, Object> props = new HashMap<>(16);
    props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, KAFKA_SERVERS);
    props.put(ProducerConfig.RETRIES_CONFIG, "3");
    props.put(ProducerConfig.ACKS_CONFIG, "all");
    props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "gzip");
    props.put(ProducerConfig.BATCH_SIZE_CONFIG, 200);
    props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringSerializer");
    props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,
            "org.apache.kafka.common.serialization.StringSerializer");
    return props;
}


public ConcurrentKafkaListenerContainerFactory<String, String> kafkaListenerContainerFactory() {
    ConcurrentKafkaListenerContainerFactory<String, String> factory =
            new ConcurrentKafkaListenerContainerFactory<>();
    factory.setConsumerFactory(consumerFactory());
    return factory;
}

@Bean
@ConditionalOnMissingBean(name = "kafkaBatchListenerForReceiver")
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaBatchListenerForReceiver() {
    ConcurrentKafkaListenerContainerFactory<String, String> factory = kafkaListenerContainerFactory();
    factory.setConcurrency(1);
    return factory;
}

@Bean
@ConditionalOnMissingBean(name = "kafkaBatchListener")
public KafkaListenerContainerFactory<ConcurrentMessageListenerContainer<String, String>> kafkaBatchListener() {
    ConcurrentKafkaListenerContainerFactory<String, String> factory = kafkaListenerContainerFactory();
    factory.setConcurrency(threadNum);
    return factory;
}




public ConsumerFactory<String, String> consumerFactory() {
    return new DefaultKafkaConsumerFactory<>(consumerConfigs());
}

public Map<String, Object> consumerConfigs() {
    Map<String, Object> props = new HashMap<>(16);
    props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, KAFKA_SERVERS);
    props.put(ConsumerConfig.GROUP_ID_CONFIG, GROUPID);
    props.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG, true);

// props.put(ConsumerConfig.CLIENT_ID_CONFIG, IPUtil.getHostName() + “-h5-kafka”);
props.put(ConsumerConfig.MAX_POLL_RECORDS_CONFIG,10);
props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class);
// props.put(ConsumerConfig.MAX_POLL_INTERVAL_MS_CONFIG, 9000);
return props;
}

}

最后kafka有两个核心的方法,发送和接收方法。首先是发送方法。
在这里插入图片描述

@Autowired
private KafkaTemplate<String, String> kafkaTemplate;

public void sendMessage(String topic, String key, String mes) {
kafkaTemplate.setProducerListener(new ProducerListener<String, String>() {
@Override
public void onSuccess(ProducerRecord<String, String> producerRecord, RecordMetadata recordMetadata) {
log.info("[TraceId :{}] send message to topic [{}] success: partition: {}, current offset: {},the msg: {}",
recordMetadata.topic(),
recordMetadata.partition(),
recordMetadata.offset(),
producerRecord.value());
}

        @Override
        public void onError(ProducerRecord<String, String> producerRecord, Exception exception) {
            exception.printStackTrace();
            log.info("[TraceId :{}] send message to topic [{}] fault : partition: {},the errMsg: {}",
                    producerRecord.topic(),
                    producerRecord.partition(),
                    exception.toString());
        }
    });
    kafkaTemplate.send(topic, key, mes);
}

其中有三个参数分别是String topic, String key, String mes。参数一是指定对应的topic。参数二是制定此接收方法唯一的一个key。参数三个这个发送方法需要发送的数据,我们先把数据进行封装,传入第三个参数中。注意数据只能放string类型,所以需要提前把数据转换成json串的形式,然后传入。然后在接收的另一边进行解析。

下面是接收方法。
在这里插入图片描述
@Trace
@KafkaListener(containerFactory = “kafkaBatchListener”,idIsGroup = false,
topics= {"#{’${kafka.topic.project.cooperation}’.split(’,’)}"})
public void consumeKafkaRequireStatus(ConsumerRecord<String, String> record){
log.info(“the kafka is consuming the host data, topic={}, offset={},partition={},the data is ={}”,
record.topic(),
record.offset(),
record.partition(),
record.value());

    kafkaUtils.consumeKafkaRequireStatus(record.value());
}

topics里面是指定接收的topic。需要和发送的时候指定的一样。
kafkaUtils.consumeKafkaRequireStatus(record.value());里面是拿到数据以后解析为数据,然后操作数据的逻辑。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Kafka是一种分布式流处理平台,它可以快速处理大量数据,并且具有高可靠性、可扩展性和容错性。在配置使用Kafka时,需要完成以下步骤: 1. 安装Kafka 可以从官方网站下载并安装Kafka。安装完成后,需要配置环境变量。 2. 启动Kafka集群 Kafka的集群由多个Kafka Broker组成,每个Broker都是一台独立的服务器。启动Kafka集群时,需要使用以下命令: ``` bin/kafka-server-start.sh config/server.properties ``` 3. 创建Topic 在Kafka中,消息被发布到Topic中。创建Topic时,需要使用以下命令: ``` bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test ``` 这个命令将创建名为“test”的Topic,并将其分配到一个分区中。 4. 发布消息 可以使用Kafka Producer API发布消息。以下是一个Java代码示例: ``` Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer"); Producer<String, String> producer = new KafkaProducer<>(props); for (int i = 0; i < 100; i++) producer.send(new ProducerRecord<String, String>("test", Integer.toString(i), Integer.toString(i))); producer.close(); ``` 这个代码片段将发布100条消息到名为“test”的Topic中。 5. 消费消息 可以使用Kafka Consumer API消费消息。以下是一个Java代码示例: ``` Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "test-group"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Arrays.asList("test")); while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for (ConsumerRecord<String, String> record : records) System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value()); } consumer.close(); ``` 这个代码片段将消费名为“test”的Topic中的消息,并输出消费的消息内容。 以上就是Kafka配置使用代码示例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值