Linux安装Kafka(包括单机版和集群版)

环境

linux版本:centos7.9

kafka版本:3.5.1

jdk版本:jdk1.8,kafka是scala语言开发的,该语言依赖JVM运行环境

ZooKeeper版本:3.8.2,选举partition

下载

下载地址:https://kafka.apache.org/downloads

选择kafka_2.13-3.5.1.tgz安装包,其中2.13是开发kafka语言scala版本,3.5.1是kafka版本。

scala语言说明:

Scala是一种运行于JVM虚拟机之上的语言。在运行时,只需要安装JDK就可以了,选哪个Scala版本没有区别。但是如果要调试源码,就必须选择对应的Scala版本。因为Scala语言的版本并不是向后兼容的。

下载解压:

bash 复制代码
[root@hecs-403280 ~]# wget https://downloads.apache.org/kafka/3.5.1/kafka_2.13-3.5.1.tgz
[root@hecs-403280 ~]# cp kafka_2.13-3.5.1.tgz /usr/local
[root@hecs-403280 local]# tar -zxvf kafka_2.13-3.5.1.tgz

单机服务

kafka自带有ZooKeeper,在kafka目录下的libs下可看到ZooKeeper相关jar。建议使用自己安装的ZooKeeper,这里还是讲一下如何使用kafka自带的ZooKeeper服务。

启动服务

启动自带ZooKeeper:

bash 复制代码
# 可以看到相应的zk程序jar包
[root@hecs-403280 kafka_2.13-3.5.1]# ls libs | grep zookeeper
zookeeper-3.6.4.jar
zookeeper-jute-3.6.4.jar

# 后台启动zk,默认端口为2181,对应的配置文件在config/zookeeper.properties
[root@hecs-403280 kafka_2.13-3.5.1]# nohup bin/zookeeper-server-start.sh config/zookeeper.properties & 

启动kafka:

bash 复制代码
# nohup命令启动kafka,日志默认输出到nohup.out文件
[root@hecs-403280 kafka_2.13-3.5.1]# nohup bin/kafka-server-start.sh config/server.properties &

kafka默认端口为9092,如下说明kafka服务已启动:

bash 复制代码
[root@hecs-403280 kafka_2.13-3.5.1]# netstat -tunlp | grep 9092
tcp6       0      0 :::9092                 :::*                    LISTEN      15281/java 

也可以通过如下命令:

bash 复制代码
[root@hecs-403280 kafka_2.13-3.5.1]# jps
15281 Kafka
22540 Jps
27036 QuorumPeerMain

简单收发消息

生产消费图示:

创建topic:

bash 复制代码
# 创建一个名为test的Topic
[root@hecs-403280 kafka_2.13-3.5.1]# bin/kafka-topics.sh --create --topic test --bootstrap-server localhost:9092
Created topic test.
# 查看Topic
[root@hecs-403280 kafka_2.13-3.5.1]# bin/kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
Topic: test     TopicId: A46bV8mbQS-OeKeYUaJPIg PartitionCount: 1       ReplicationFactor: 1    Configs: 
        Topic: test     Partition: 0    Leader: 0       Replicas: 0     Isr: 0
[root@hecs-403280 kafka_2.13-3.5.1]# 

启动一个生产端发送消息:

bash 复制代码
[root@hecs-403280 kafka_2.13-3.5.1]# bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test
>jay

可通过ctrl+C退出命令行。

如果不提前创建Topic,那么在第一次往一个之前不存在的Topic发送消息时,消息也能正常发送,只是会抛出LEADER_NOT_AVAILABLE警告。

启动一个消费端接收消息:

bash 复制代码
[root@hecs-403280 kafka_2.13-3.5.1]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test
jay

如果客户端先发送消息,再打开消费端时是看不到历史消息的,可以通过指定partition和offset来消费消息:

bash 复制代码
[root@hecs-403280 kafka_2.13-3.5.1]# bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --partition 0 --offset 0 --topic test
jay
ji
jolin
jay

如果想看命令支持哪些参数,可以直接输入命令,后面不接任何参数:

bash 复制代码
[root@hecs-403280 kafka_2.13-3.5.1]# bin/kafka-console-consumer.sh

部分结果:

集群服务

环境准备

这里不采用kafka自带的ZooKeeper,而是使用单独的ZK集群。

ZooKeeper安装请参考如下文章。

传送门:https://blog.csdn.net/u010355502/article/details/132308824

准备三台服务:

192.168.0.83

192.168.0.184

192.168.0.48

关闭防护墙:

bash 复制代码
# 查看防火墙状态
[root@hecs-403280 ~]# firewall-cmd --state
not running

# 如果防火墙是开启的,则关闭防火墙
[root@hecs-403280 ~]# systemctl stop firewalld.service

下载安装

kafka服务并不需要进行选举,因此也没有奇数台服务的建议。

下载kafka安装包后,放到三台服务器的/usr/local目录下。

bash 复制代码
[root@hecs-403280 ~]# scp ~/kafka_2.13-3.5.1.tgz root@192.168.0.184:/usr/local
[root@hecs-403280 ~]# scp ~/kafka_2.13-3.5.1.tgz root@192.168.0.48:/usr/local

修改配置文件

三台服务器都要修改配置文件,注意broker.id不能相同。

bash 复制代码
[root@hecs-403280 config]# pwd
/usr/local/kafka_2.13-3.5.1/config
[root@hecs-403280 config]# vim server.properties 

修改server.properties文件如下:

bash 复制代码
# broker的全局唯一编号,不能重复,只能是数字。
broker.id=0
# 数据文件地址。默认是给的/tmp目录。
log.dirs=/usr/local/kafka_2.13-3.5.1/kafka-logs
# 默认的每个Topic的分区数
num.partitions=1
# zookeeper的服务地址
# zookeeper.connect=192.168.0.83:2181,192.168.0.184:2181,192.168.0.48:2181
# 可以选择指定zookeeper上的基础节点。
zookeeper.connect=192.168.0.83:2181,192.168.0.184:2181,192.168.0.48:2181/kafka

详细参数说明:

Property Default Description
broker.id 0 broker的"名字",你可以选择任意你喜欢的数字作为id,只要id是唯一,每个broker都可以用一个唯一的非负整数id进行标识。
log.dirs /tmp/kafka-logs kafka存放数据的路径。这个路径并不是唯一的,可以是多个,路径之间只需要使用逗号分隔即可;每当创建新partition时,都会选择在包含最少partitions的路径下进行。
listeners PLAINTEXT://127.0.0.1:9092 server接受客户端连接的端口,ip配置kafka本机ip即可
zookeeper.connect localhost:2181 zookeeper连接地址。hostname:port。如果是Zookeeper集群,用逗号连接。
log.retention.hours 168 每个日志文件删除之前保存的时间。
num.partitions 1 创建topic的默认分区数
default.replication.factor 1 自动创建topic的默认副本数量
min.insync.replicas 1 当producer设置acks为-1时,min.insync.replicas指定replicas的最小数目(必须确认每一个repica的写数据都是成功的),如果这个数目没有达到,producer发送消息会产生异常
delete.topic.enable false 是否允许删除主题

启动集群

启动服务时需要指定配置文件:

bash 复制代码
bin/kafka-server-start.sh -daemon config/server.properties

-daemon表示后台启动kafka服务,这样就不会占用当前命令窗口。

启动报错如下:

bash 复制代码
[root@ecs-002 kafka_2.13-3.5.1]# bin/kafka-server-start.sh config/server.properties
Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000c0000000, 1073741824, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 1073741824 bytes for committing reserved memory.
# An error report file with more information is saved as:
# /usr/local/kafka_2.13-3.5.1/hs_err_pid6550.log

提示分配内存大小不足,修改启动命令的内存参数:

bash 复制代码
[root@ecs-002 kafka_2.13-3.5.1]# vim bin/kafka-server-start.sh

修改为:

再次启动,就没有报错了。

通过jps指令可以查看Kafka的进程:

bash 复制代码
[root@hecs-403280 logs]# jps
28134 Kafka
27036 QuorumPeerMain
30686 Jps
相关推荐
blessing。。33 分钟前
I2C学习
linux·单片机·嵌入式硬件·嵌入式
2202_754421541 小时前
生成MPSOC以及ZYNQ的启动文件BOOT.BIN的小软件
java·linux·开发语言
努力的悟空1 小时前
国土变更调查拓扑错误自动化修复工具的研究
运维·自动化
运维&陈同学2 小时前
【zookeeper03】消息队列与微服务之zookeeper集群部署
linux·微服务·zookeeper·云原生·消息队列·云计算·java-zookeeper
周末不下雨2 小时前
win11+ubuntu22.04双系统 | 联想 24 y7000p | ubuntu 22.04 | 把ubuntu系统装到1T的移动固态硬盘上!!!
linux·运维·ubuntu
BestandW1shEs3 小时前
彻底理解消息队列的作用及如何选择
java·kafka·rabbitmq·rocketmq
天冬忘忧3 小时前
Kafka 生产者全面解析:从基础原理到高级实践
大数据·分布式·kafka
哎呦喂-ll3 小时前
Linux进阶:环境变量
linux
耗同学一米八3 小时前
2024 年河北省职业院校技能大赛网络建设与运维赛项样题四
运维·网络