写点什么

技术分享| 消息队列 Kafka 群集部署

作者:anyRTC开发者
  • 2022-10-18
    上海
  • 本文字数:2897 字

    阅读完需:约 1 分钟

一、简介

1、介绍

Kafka 是一个分布式、分区的、多副本的、多订阅者,基于 zookeeper 协调的分布式日志系统(也可以当做 MQ 系统),常见可以用于 web/nginx 日志、访问日志,消息服务等等。

2、主要应用场景
  • 日志收集:可以用 kafka 收集各种服务的日志 ,通过已统一接口的形式开放给各种消费者。

  • 消息系统:解耦生产和消费者,缓存消息。

  • 用户活动追踪:kafka 可以记录 webapp 或 app 用户的各种活动,如浏览网页,点击等活动,这些活动可以发送到 kafka,然后订阅者通过订阅这些消息来做监控。

  • 运营指标:可以用于监控各种数据。

3、Kafka 主要目标如下:
  • 以时间复杂度为 O(1)的方式提供消息持久化能力,即使对 TB 级以上数据也能保证常数时间的访问性能。

  • 高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒 100K 条消息的传输。

  • 支持 Kafka Server 间的消息分区,及分布式消费,同时保证每个 partition 内的消息顺序传输。

  • 同时支持离线数据处理和实时数据处理。

  • Scale out:支持线水平扩展

4、基本概念

kafka 是一个分布式的分区的消息,提供消息系统应该具备的功能。



二、环境准备

当前环境:centos7.9三台软件版本:kafka_2.13-3.0.0环境目录:/usr/local/kafka
复制代码


下载kafka;包含了zookeeper(三台机器都要操作)


[root@localhost opt]# wget https://archive.apache.org/dist/kafka/3.0.0/kafka_2.13-3.0.0.tgz[root@localhost opt]# tar zxvf kafka_2.13-3.0.0.tgz[root@localhost opt]# mv kafka_2.13-3.0.0 /usr/local/kafka
复制代码


配置环境变量(三台机器都要操作)


[root@localhost opt]# vim /etc/profile## 末尾添加export ZOOKEEPER_HOME=/usr/local/kafkaexport PATH=$PATH:$ZOOKEEPER_HOME/bin
## 加载环境变量[root@localhost opt]# source /etc/profile
复制代码

三、Zookeeper 的安装

由于 Kafka 分区位置和主题配置之类的元数据都存储在 ZooKeeper 群集中,所以要搭建 kafka 集群环境必须先安装 zookeeper 群集


zookeeper配置文件修改(三台配置一样)


[root@localhost ~]# cd /usr/local/kafka/[root@localhost kafka]# vim config/zookeeper.properties


dataDir=/tmp/zookeeper        ## 主要用来配置zookeeper server数据的存放路径clientPort=2181            ## zookeeper服务端口tickTime=2000            ## zookeeper客户端与服务器之间的心跳时间。默认值为2000毫秒,即2秒initLimit=10            ## Follower连接到Leader并同步数据的最大时间syncLimit=5              ## Follower同步Leader的最大时间maxClientCnxns=0          ## 客户端最大连接数,设置0或者不设置表示取消连接数限制admin.enableServer=false      ## 禁用 Admin Serverserver.0=192.168.1.13:2888:3888    ## 配置zookeeper群集server.1=192.168.1.108:2888:3888server.2=192.168.1.143:2888:3888
复制代码


创建myid文件(三台机器都要操作)


192.168.1.13机器上


[root@localhost kafka]# mkdir -p /opt/zookeeper;echo "0" > /tmp/zookeeper/myid
复制代码


192.168.1.108机器上


[root@localhost kafka]# mkdir -p /opt/zookeeper;echo "1" > /tmp/zookeeper/myid
复制代码


192.168.1.143机器上


[root@localhost kafka]# mkdir -p /opt/zookeeper;echo "2" > /tmp/zookeeper/myid
复制代码


创建system启动文件


[root@localhost kafka]# vim /usr/lib/systemd/system/zookeeper.service


[Unit]Description=zookeeperAfter=network.targetWants=network.target
[Service]Type=simpleEnvironment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/app/idk/bin"User=rootGroup=rootExecStart=/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.propertiesRestart=always
[Install]WantedBy=multi-user.target
复制代码


启动zookeeper


[root@localhost kafka]# systemctl enable zookeeper.service[root@localhost kafka]# systemctl start zookeeper.service

四、Kafka 的安装

kafka配置文件修改


[root@localhost ~]# cd /usr/local/kafka/[root@localhost kafka]# vim config/server.properties (直接复制到另外两台)


broker.id=1                        ## 第一台1,第二台为2 第三台为3listeners=PLAINTEXT://:9092                ## 监听IP地址和端口advertised.listeners=PLAINTEXT://192.168.1.13:9092    ## 配置kafka的broker ipnum.network.threads=3num.io.threads=8socket.send.buffer.bytes=102400socket.receive.buffer.bytes=102400socket.request.max.bytes=404857600log.dirs=/tmp/kafka-logsnum.partitions=1num.recovery.threads.per.data.dir=1offsets.topic.replication.factor=1transaction.state.log.replication.factor=1transaction.state.log.min.isr=1log.retention.hours=168log.segment.bytes=1073741824log.retention.check.interval.ms=300000zookeeper.connect=192.168.1.13:2181,192.168.1.108:2181,192.168.1.143:2181  ##连接zookeeperzookeeper.connection.timeout.ms=18000group.initial.rebalance.delay.ms=0
复制代码


## 修改192.168.1.108的配置broker.id=2listeners=PLAINTEXT://:9092advertised.listeners=PLAINTEXT://192.168.1.108:9092
修改192.168.1.143的配置broker.id=3listeners=PLAINTEXT://:9092advertised.listeners=PLAINTEXT://192.168.1.143:9092
复制代码


## 修改JVM参数 (根据需求修改)kafka_heap_opts:指定堆大小,默认是1GB
[root@localhost kafka]# vim bin/kafka-server-start.sh if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then export KAFKA_HEAP_OPTS="-Xmx2G -Xms2G -XX:MaxDirectMemorySize=1G" ## 修改这一行即可fi
复制代码


创建system启动文件


[root@localhost kafka]# vim /usr/lib/systemd/system/kafka.service


[Unit]Description=kafkaAfter=network.targetWants=network.target
[Service]Type=simpleEnvironment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/app/idk/bin"User=rootGroup=rootExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.propertiesRestart=always
[Install]WantedBy=multi-user.target
复制代码


启动zookeeper[root@localhost kafka]# systemctl enable kafka.service[root@localhost kafka]# systemctl start kafka.service

五、踩坑

服务启动不起来 找不到 Java

/usr/local/kafka/bin/kafka-run-class.sh: line 309: exec: java: not found


第一种: 修改配置文件中的Java环境


## 修改kafka-run-class.sh 配置文件[root@localhost kafka]# vim bin/kafka-run-class.sh## 找到如下:# Which java to useif [ -z "$JAVA_HOME" ]; then  JAVA="/usr/local/jdk/bin/java"           ## 修改到绝对路径else  JAVA="$JAVA_HOME/bin/java"fi
复制代码


第二种: 做个软连接


[root@localhost kafka]# echo $PATH/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/home/laserx/.local/bin:/home/laserx/bin
[root@localhost kafka]# ln -s /usr/local/jdk1.8.0_251/bin/java /usr/local/bin/java
复制代码



发布于: 19 小时前阅读数: 4
用户头像

实时交互,万物互联! 2020-08-10 加入

实时交互,万物互联,全球实时互动云服务商领跑者!

评论

发布
暂无评论
技术分享| 消息队列Kafka群集部署_nginx_anyRTC开发者_InfoQ写作社区