关于kafka(2.5.0版本)安装教程和简单的springboot项目测试

一、kafka安装教程:

1.安装环境
准备三个服务器节点,环境中有jdk(建议1.8版本),因本章讲述使用kafka内置zookeeper,所以不讲解zookeeper安装方式(如果有需要可以百度zookeeper安装方法,注意kafka版本的不同对zookeeper版本有要求,具体细节问度娘。)
2.kafk安装包下载
可在kafka官网下载2.5.2 如下图所示:
这是官网下载方式
也可以在linux服务器下使用命令进行下载
->首先创建并进入kafka安装目录

mkdir -p /opt/kafka && cd /opt/kafka

->进入目录之后使用wget命令进行安装(如果没有wget,可以输入 yum -y install wget 进行安装)安装完成后进行解压(命令:tar -zxvf kafka_2.12-2.5.0.tgz)

wget https://mirrors.tuna.tsinghua.edu.cn/apache/kafka/2.5.0/kafka_2.12-2.5.0.tgz

3.修改配置文件
解压完成后,进入kafka_2.12-2.5.0目录中的config目录下,修改配置文件,需要修改的配置文件有server.properties、producer.properties、consumer.properties
修改server.properties文件

## broker的全局唯一编号,不能重复,在其他服务器节点要更改id
broker.id=0
## 服务器需要监听的端口号
listeners=PLAINTEXT://192.168.xx.xxx:9092
## 注册到zookeeper的IP和端口
advertised.listeners=PLAINTEXT://192.168.xx.xxx:9092
## 存储消息的目录
log.dirs=/opt/kafka/kafka_2.12-2.5.0/config/kafka-logs
## 连接的zookeeper(准备了三个服务器节点,就填写三个ip)
zookeeper.connect=192.168.11.121:2181,192.168.11.122:2181,192.168.11.123:2181

修改producer.properties

## 指定kafka节点列表,用于获取metadata,不必配置全部
bootstrap.servers=192.168.12.132:9092,192.168.12.133:9092,192.168.12.134:9092

修改consumer.properties

## 指定kafka节点列表,用于获取metadata,不必配置全部
bootstrap.servers=192.168.12.132:9092,192.168.12.133:9092,192.168.12.134:9092

第一个服务器节点配置完之后,按照流程来讲按照同样的方式配置第二和第三个,考虑到要重新下载安装包的操作太慢,可以使用分发安装包命令将第一个服务器节点的安装包分发到第二个和第三个服务器节点

scp -r /opt/kafka 192.168.11.122:/opt/

这样就可以省略重新下载的麻烦,在按照上述的流程修改配置文件即可。
4.启动zookeeper和kafka
进入kafka的bin目录下,如图所示:
在这里插入图片描述
首先启动zookeeper,
使用内置zookeeper运行kafka时,要求环境中有jdk
首先启动zookeeper:进入bin目录

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

启动成功后出现以下输出:
在这里插入图片描述
zookeeper启动成功后启动kafka,进入kafka bin目录:

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

启动成功后出现以下输出:
在这里插入图片描述
启动完成后创建topic(演示一个服务器节点(192.168.11.121))
kafka/bin目录下输入:

./kafka-topics.sh --create --zookeeper 192.168.11.121:2181 --replication-factor 1 --partitions 1 --topic topic1

创建完成后可以查看创建topic

./kafka-topics.sh --describe --zookeeper 192.168.11.121:2181 --topic topic1

创建完成后就可以启动生产者和消费者了,开两个新窗口分别进入kakfa的bin目录下
分别输入:

./kafka-console-producer.sh --broker-list 192.168.11.121:9092 --topic topic1
./kafka-console-consumer.sh --bootstrap-server 192.168.11.121:9092 --topic topic1 --from-beginning

生产者输入“大黄”回车
在这里插入图片描述
消费者这边就可以查看到,成功
在这里插入图片描述

二、springboot项目测试kafka

<dependencies>
        <dependency>
            <groupId>org.springframework.kafka</groupId>
            <artifactId>spring-kafka</artifactId>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <artifactId>spring-boot-test</artifactId>
                    <groupId>org.springframework.boot</groupId>
                </exclusion>
                <exclusion>
                    <artifactId>spring-test</artifactId>
                    <groupId>org.springframework</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>com.google.code.gson</groupId>
            <artifactId>gson</artifactId>
            <version>2.8.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-test</artifactId>
            <version>2.0.2.RELEASE</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>5.0.6.RELEASE</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

创建一个实体类user

@Data
public class User{
    private Long id;
    private String name;
    private LocalDateTime sendTime;
}

生产者

@Component
@Slf4j
public class Producer  {

    @Autowired
    private KafkaTemplate<String, String> kafkaTemplate;

    private Gson gson = new GsonBuilder().create();

    /**
     * 发送消息的方法
     */
    public void send() {
        User user = new User();
        user .setId(System.currentTimeMillis());
        user .setName("大黄");
        user .setSendTime(LocalDateTime.now());
        log.info("-----------  User= {}", gson.toJson(message));
        kafkaTemplate.send("topic1", gson.toJson(user));
    }
}

消费者

@Component
@Slf4j
public class KafkaReceiver {

    @KafkaListener(topics = {"topic1"})
    public void listen(ConsumerRecord<?, ?> record) {

        Optional<?> kafkaMessage = Optional.ofNullable(record.value());

        if (kafkaMessage.isPresent()) {
            Object message = kafkaMessage.get();

            log.info("----------------- record =" + record);
            log.info("------------------ message =" + message);
        }

    }
}

测试类

package com.example.demo.kafka;

import com.example.demo.DemoApplication;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.stereotype.Component;

import org.springframework.test.context.junit4.SpringRunner;

/**
 * @author huangSen
 * @create 2020-06-17-16:54
 */

@Component
@RunWith(SpringRunner.class)
@SpringBootTest(classes = DemoApplication.class ,webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class Test {
    @Autowired
    private Producer sender;
    @org.junit.Test
    public void testKafka(){
        for (int i = 0; i < 3; i++) {
            //调用消息发送类中的消息发送方法
            sender.send();
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }

}

配置


server.port=9099
###########################################kafka about config #######################################################
spring.kafka.bootstrap-servers=192.168.11.121:9092
##########################producer about config##############################
#设置一个默认组
spring.kafka.consumer.group-id=0
#key-value序列化反序列化
spring.kafka.consumer.key-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.consumer.value-deserializer=org.apache.kafka.common.serialization.StringDeserializer
spring.kafka.producer.key-serializer=org.apache.kafka.common.serialization.StringSerializer
spring.kafka.producer.value-serializer=org.apache.kafka.common.serialization.StringSerializer
#每次批量发送消息的数量
spring.kafka.producer.batch-size=65536
spring.kafka.producer.buffer-memory=524288

执行测试类,出现下图即可在这里插入图片描述
在测试过程中会出现

Connection to node -1 (/192.168.11.121:9092) could not be established.

我当时在这个服务器节点中开放这个9092这个端口即可

vi /etc/sysconfig/iptables
进去之后添加9092端口号即可

本文只为技术交流不做商用,如有重复请见谅私信!!!!!!!!!!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值