Kafka-linux环境部署

Kafka在Linux环境下的安装,以及一点点的kafka实战运维优化经验

部署

官网地址:https://kafka.apache.org/

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

注:Kafka是用Scala语言开发的,运行在JVM上,因此需要jdk做为基础环境,使用jdk1.8以上的版本。

找到kafka_2.13-2.8.1.tgz包进行下载。详细的安装步骤如下:

  • 创建目录上传jdk文件

    shell 复制代码
    mkdir /soft
    cd /soft
  • 解压kafka压缩文件

    shell 复制代码
    tar -zxvf kafka_2.13-2.8.1.tgz
  • 提前创建配置文件中所有的文件夹

    mkdir -p /opt/software/kafka
    # zookeeper数据目录
    mkdir -p /soft/kafka_2.13-2.8.1/zookeeper  
    # kafka日志
    mkdir -p /soft/kafka_2.13-2.8.1/kafka/log        
    # zookeeper日志
    mkdir -p /soft/kafka_2.13-2.8.1/zookeeper/log 
    
  • 修改zookeeper的配置文件zookeeper.properties

    shell 复制代码
    # 切换目录
    cd /soft/kafka_2.13-2.8.1/config
    # 编辑 zookeeper配置文件
    vim zookeeper.properties
    
    # zookeeper数据目录
    dataDir=/soft/kafka_2.13-2.8.1/zookeeper
    # zookeeper日志目录
    dataLogDir=/soft/kafka_2.13-2.8.1/zookeeper/log
    # 更改zookeeper端口
    clientPort=2181
    maxClientCnxns=100
    tickTimes=2000
    initLimit=10
    syncLimit=5
  • 修改kafka的配置文件server.properties

    shell 复制代码
    # 切换目录
    cd /soft/kafka_2.13-2.8.1/config
    # 编辑 kafka配置文件
    vim server.properties
    ######   server.properties开始     ######
    # 设置ip端口 (阿里云服务器,使用内网ip地址)
    listeners=PLAINTEXT://172.17.123.108:9092
    #日志存放路径,上面创建的目录
    log.dirs=/soft/kafka_2.13-2.8.1/kafka/log
    #zookeeper地址和端口,单机配置部署,localhost:2181
    zookeeper.connect=172.17.123.108:2181
    ######   server.properties结束     ######
    
    # 查看服务器网卡ip 作为kafka 和 zookeeper 的ip
    ip addr
  • 启动kafka

    java 复制代码
    # 切换目录
    cd /soft/kafka_2.13-2.8.1/bin
       
    # 优先启动 zookeeper
    ./zookeeper-server-start.sh /soft/kafka_2.13-2.8.1/config/zookeeper.properties &
    # 再启动 kafka
    ./kafka-server-start.sh /soft/kafka_2.13-2.8.1/config/server.properties &

基础指令

以下主要介绍topic的创建、插件,生产者发送消息,消费者消费消息的基础脚本指令的使用

shell 复制代码
# 查看topic数据
./kafka-topics.sh --bootstrap-server 8.140.224.210:9092 --list
# 创建topic
./kafka-topics.sh --create --topic <your_topic_name> --bootstrap-server localhost:9092 --partitions <num_partitions> --replication-factor <replication_factor>
--topic <your_topic_name>:指定你要创建的 Topic 名称。
--bootstrap-server localhost:9092:Kafka 服务的地址。
--partitions <num_partitions>:为该 Topic 指定的分区数量。
--replication-factor <replication_factor>:副本因子,单机环境下通常设置为 1。
./kafka-topics.sh --create --topic data0912 --bootstrap-server 8.140.224.210:9092 --partitions 1 --replication-factor 1    
# 生产消息
./kafka-console-producer.sh --topic data0912 --bootstrap-server 8.140.224.210:9092    
# 消费消息
./kafka-console-consumer.sh --topic data0912 --bootstrap-server 8.140.224.210:9092 --from-beginning

服务运维

服务器磁盘爆满,导致kafka服务崩溃

当别人通过kafka给我推送十几亿文本数据时,我正常批量读取数据,且多线程的处理数据,也验证了消费数据是极快的,不会造成kafka数据的挤压。但是还是导致了kafka服务的崩溃,排查后发现云服务器100GB的磁盘已经爆满,便在排查时发现kakfa默认保存近七天的数据,而我一天的数据就超过了100GB。具体的解决方案如下:

shell 复制代码
# 1.查看kafka的配置文件  server.properties 中log文件的存放位置 log.dirs=/soft/kafka_2.13-2.8.1/kafka/log
cd /soft/kafka_2.13-2.8.1/config
cat server.properties
# 2.切换到log文件下查看,那个topic目录下的磁盘空间占用过大
cd /soft/kafka_2.13-2.8.1/kafka/log
# 查看log文件下占用磁盘严重的目录
du -sh *
# 切换到 对应的目录
cd cd data0912-0
#3.删除较早的***.log文件
# 目录下存在众多***.index,***.log文件;***.index中存放的消息物理位置的偏移量;***.log中存放的是消息的实际内容
# log文件默认存放时间为 7天;7天内所有数据都进行存储,就会导致磁盘爆破的问题
rm -rf *.log
#4.更改配置文件
cd /soft/kafka_2.13-2.8.1/config
vim server.properties
# 更改以下配置
# segment 文件保留时间(默认168小时 7天)
#log.retention.hours=168
# segment 文件的保留时间改为 5小时
log.retention.hours=5
# 日志文件中 每个segment 文件默认大小 为1g
log.segment.bytes=1073741824
# 多久时间扫描一次 日志文件的大小 (单位:毫秒) 五分钟
log.retention.check.interval.ms=300000
# kakfa 从0.10.0版本之后不再需要通过以下配置来启动日志清理策略;直接按照 留存时间、文件大小,进行清理
# 日志清理配置 开始
# 以segment为基本单位进行定期清理,当前正在使用的segment不会被清理。
# 日志清理是否打开
log.cleaner.enable=ture
# 多线程清理,提高数据清理速度
log.cleaner.threads=2
# 采用日志删除策略进行删除
log.cleanup.policy=delete
# 日志清理配置 结束
#5.重启kafka
相关推荐
猫猫的小茶馆8 分钟前
【C语言】指针常量和常量指针
linux·c语言·开发语言·嵌入式软件
朝九晚五ฺ30 分钟前
【Linux探索学习】第十五弹——环境变量:深入解析操作系统中的进程环境变量
linux·运维·学习
ernesto_ji1 小时前
Jenkins下载安装、构建部署到linux远程启动运行
linux·servlet·jenkins
李迟1 小时前
某Linux发行版本无法使用nodejs程序重命名文件问题的研究
java·linux·服务器
酷酷学!!!2 小时前
Linux基础指令(汇总)
linux·运维·服务器
枫叶丹42 小时前
【在Linux世界中追寻伟大的One Piece】手写序列化与反序列化
linux·运维·网络
工业甲酰苯胺2 小时前
Python脚本消费多个Kafka topic
开发语言·python·kafka
韦德斯2 小时前
嵌入式Linux的RTC读写操作应用
linux·运维·c语言·arm开发·实时音视频
程序员JerrySUN3 小时前
熟悉的 Docker,陌生的 Podman
linux·docker·容器·系统架构·podman