Kafka从零安装到实现基本通信

背景

因项目需求要使用kafka实现消息队列,从零开始学习安装。

zookeeper安装

安装

从官网https://dlcdn.apache.org/zookeeper/上下载,这里选择3.7.0版本。

注意事项

  • zookeeper从3.5.5开始,带有bin名称的包才是编译后的二进制的包,而之前的普通的tar.gz的包里面是只是源码的包,无法直接使用。

配置

  1. 解压
    tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
  2. 复制config文件夹下zoo_sample.cfg,重命名为zoo.cfg,作为zookeeper配置文件
  3. 修改配置文件
tickTime=2000   #session的会话时间 以ms为单位
initLimit=10      #服务器启动以后,master和slave通讯的时间
syncLimit=5       #master和slave之间的心跳检测时间,检测slave是否存活
dataDir=/tmp/zookeeper  #保存zk的快照和数据,自行指定
clientPort=2181      #客户端访问zk的端口

# 在末尾添加
#2888是数据同步和消息传递端口,3888是选举端口
server.1=server1IP:2888:3888 
server.2=server2IP:2888:3888
server.3=server3IP:2888:3888
  1. 在 3 中数据目录下建立myid文件,在三个服务器上内容分别为1,2,3
    echo 1>>dataDir/myid
  2. 分别在三个服务器上启动zookeeper
    bin/zkServer.sh start
  3. 查看zookeeper状态
    bin/zkServer.sh status
    可以看到有一个leader,两个follower

注意事项

  1. 分布式zookeeper集群必须大于等于三台,且最好为奇数台。如果只有2台,通过 6 步骤查看状态时为standalone
    原因:必须满足n/2+1=m, m必须大于部署zk机器数的一半(n/2)可用才认为集群可用,而且奇数台更节省资源
2/2+1=2 一台不能坏
3/2+1=2 可以坏掉一台

4/2+1=3 只能坏一台
5/2+1=3 可以坏2台
  1. myid不要重复,不能缺失,影响leader的选举
    参考:https://www.cnblogs.com/veblen/p/10992103.html
  2. 安装及修改配置文件时,可以在第一台服务器上配置完,通过scp语句传到另外的服务器上,再去改部分配置文件。

kafka安装、配置及建立基本通信

安装

从官网https://kafka.apache.org/downloads上下载,这里选择 kafka_2.13-3.1.0.tgz版本。

配置

  1. 解压
    tar -zxvf kafka_2.13-3.1.0.tgz
  2. 修改三台服务器上config/server.properties配置文件
#以master节点为例
broker.id=1 # 每台服务器上不同

#listeners = PLAINTEXT://your.host.name:9092
#9092为kafka端口号
listeners=PLAINTEXT://server1IP:9092
host.name=server1IP
#端口号为zookeeper端口号
zookeeper.connect=server1IP:2180,server2IP:2181,server1IP3:2181

  1. 在zookeeper启动的前提下,在每个节点上启动broker
#后台运行
bin/kafka-server-start.sh config/server.properties 1>/dev/null 2>&1 &
#通过jps命令查看是否启动
jps
#jps结果
21938 Kafka
4885 Jps
12326 QuorumPeerMain
  1. 创建topic
    bin/kafka-topics.sh --create --bootstrap-server server1IP:9092 --replication-factor 1 --partitions 1 --topic test

  2. 查看topic

bin/kafka-topics.sh --describe --bootstrap-server server1IP:9092 --topic test
#结果
Topic: test	TopicId: r5H3D_sAQIGmCSQMaMiYmQ	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824
	Topic: test	Partition: 0	Leader: 3	Replicas: 3	Isr: 3
  1. 启动生产者
    bin/kafka-console-producer.sh --topic test --bootstrap-server server1IP:9092

  2. 启动消费者
    bin/kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server server1IP:9092

注意事项

  1. 配置文件中listeners一定要配置,否则会导致生产者无法生产及消费者无法消费(请求不到)。

  2. QuorumPeerMain表示zookeeper是否启动,通过jps没有看到的话要重启zookeeper。
    重启zookeeper可能遇到端口被占用的情况:

#重启zookeeper
./zkServer.sh restart

#如果遇到重启失败,先看端口是否被占用,root账户下查看,避免看不到某些进程的id
sudo netstat -tunlp
#释放端口重启zookeeper
sudo kill -9 id
./zkServer.sh start
  1. 创建topic的语句在新版本有所变化,使用旧版本语句会报错。
    在旧版本里创建topic语句为
    bin/kafka-topics.sh --create --zookeeper server1IP:9092 --replication-factor 1 --partitions 1 --topic test
    新版本变为
    bin/kafka-topics.sh --create --bootstrap-server server1IP:9092 --replication-factor 1 --partitions 1 --topic test
posted @ 2022-04-06 15:11  zjcfrancis  阅读(42)  评论(0编辑  收藏  举报