【145】Centos7安装Kafka 2.5.0,并和spring boot结合使用

上传 kafka_2.12-2.5.0.tgz 文件到linux服务器上。
解压Kafka压缩包:

tar -xzf kafka_2.12-2.5.0.tgz

进入Kafka目录

cd kafka_2.12-2.5.0

因为Kafka使用了zookeeper,所以我们要先启动zookeeper。如果Linux服务器上没安装过zookeeper,可以直接执行下面的命令:

bin/zookeeper-server-start.sh config/zookeeper.properties

不过,有些时候我们已经在服务器上安装了zookeeper了,所以需要改一下kafka的配置,让它访问已经安装好的zookeeper。打开 kafka 目录下的 config/zookeeper.properties 文件,搜索 zookeeper.connect 配置项,这里可以配置zookeeper的地址和端口号。因为我的服务器上已经安装了zookeeper,并且给zookeeper的zoo.cfg文件配置了 clientPort=8091 ,所以我在config/server.properties 中配置了:

# 只改了这一项,其他配置不变
zookeeper.connect=localhost:8091

启动kafka:

bin/kafka-server-start.sh config/server.properties &

创建一个topic

bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

查看已经创建的topic:

> bin/kafka-topics.sh --list --bootstrap-server localhost:9092
test

删除已经创建的topic,要确保删除的时候此topic没有被使用:

bin/kafka-topics.sh --delete --bootstrap-server localhost:9092  --topic test

Kfka生产者

Java代码加入生产者Maven依赖:

<dependency>
    <groupId>org.apache.kafkagroupId>
    <artifactId>kafka-clientsartifactId>
    <version>2.5.0version>
dependency>

Kafka 生产者工具类,我是用了SpringBoot 2.1.6


import org.apache.kafka.clients.producer.Callback;
import org.apache.kafka.clients.producer.KafkaProducer;
import org.apache.kafka.clients.producer.ProducerRecord;
import org.apache.kafka.clients.producer.RecordMetadata;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.util.Properties;

/**
 * Kafka队列工具类
 */
@Component
public final class KafkaUtils {
    protected Logger logger = LoggerFactory.getLogger(getClass());

    // 这里你也可以配置到 yml 文件里面,使用  @Value 取值
    private String bootstrapServers = "192.168.1.124:9092";

    /**
     * 发送异步消息
     * @param topic  kafka话题
     * @param key    kafka key
     * @param value  kafka 消息的取值
     */
    public void sendAsyncMsg(String topic, String key, String value) {
        Properties kafkaProps = new Properties();
        kafkaProps.put("bootstrap.servers", bootstrapServers);
        kafkaProps.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        kafkaProps.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        KafkaProducer<String, String> producer = new KafkaProducer<String, String>(kafkaProps);

        ProducerRecord<String, String> record = new ProducerRecord<String, String>(topic, key, value);//Topic Key Value
        producer.send(record, new Callback() {
            @Override
            public void onCompletion(RecordMetadata recordMetadata, Exception e) {
                if (null != e) {
                    logger.error("kafka producer error ", e);
                }
            }
        });
    }

    /**
     * 发送异步消息
     * @param topic  kafka话题
     * @param value  kafka 消息的取值
     */
    public void sendAsyncMsg(String topic, String value) {
        sendAsyncMsg(topic, null, value);
    }

    /**
     * 发送异步消息
     * @param topic  kafka话题
     * @param value  kafka 消息的对象
     */
    public void sendAsyncMsgObj(String topic, Object value) {
        sendAsyncMsg(topic, null, JSONUtils.beanToJson(value));
    }
}

Kafka消费者

我使用了spring boot。
pom.xml Kafka依赖:

       
        <dependency>
            <groupId>org.apache.kafkagroupId>
            <artifactId>kafka-clientsartifactId>
            <version>2.5.0version>
        dependency>
        
        <dependency>
            <groupId>org.springframework.kafkagroupId>
            <artifactId>spring-kafkaartifactId>
            <version>2.5.0.RELEASEversion>
        dependency>

同时要确保你的spring boot 版本是 2.3.0.RELEASE

yml 文件需要做如下配置:

spring:
    kafka:
        consumer:
          group-id: yqlwlog
          auto-offset-reset: earliest
          bootstrap-servers: 192.168.1.124:9092

然后我们编写一个监听类,消费 Kafka 队列中的消息:

package com.centling.consumer.modules.kafka.listener;


import org.springframework.kafka.annotation.KafkaListener;
import org.springframework.stereotype.Component;

@Component
public class TestListener {
    @KafkaListener(topics = {"test"})
    public void listenTest(String data) {
        System.out.println(data);
    }
}

这里要注意,需要先在服务器上启动好 Kafka 服务器,并创建好 topic ,生产者和消费者才能正常使用。

你可能感兴趣的:(kafka,zookeeper,微服务,kafka,消息队列,zookeeper,SpringBoot)