zoukankan      html  css  js  c++  java
  • Kafka_2.12-2.5.1集群搭建与参数调优

    Kafka是目前业界使用最广泛的消息队列。数据流转常见这样的业务场景,客户端把采集到的日志推送给Kafka,业务方可以消费Kafka的数据落地HDFS,用于离线分析,也可以使用Spark或Flink消费Kafka中的数据,用于实时计算。Kafka在数据流转过程中发挥着纽带作用,可用于日志采集和数据处理系统间的解耦。

    本文将介绍搭建Kafka集群的详细安装步骤,并根据日常业务遇到的问题,对Linux系统和Kafka节点的配置参数进行调优。

    1. 环境说明

    组件 版本 说明
    Kafka 2.12-2.5.1
    Zookeeper 3.5.8 5个节点
    JDK 1.8.0_144

    服务器配置:

    CPU:【2*Intel(R) Xeon(R) Silver 4214 Processor 12 Cores 24 Threads 2.20 GHz】
    内存:【8*16G DDR4-2666 ECC 1.2v RDIMM】
    机械硬盘:【12*4T 7200转 3.5寸 SATA接口】
    网卡:万兆网卡
    Linux系统:centos7.6
    

    2.初始化各个节点基础环境

    • 安装jdk1.8
    下载jdk1.8.0_144,并解压到/usr/local目录
    
    • 关闭swap

    若不关闭swap,内存频繁与磁盘空间交换,会有增加gc时间的风险。

    #临时生效
    swapoff -a
    
    #永久生效
    echo 'swapoff -a' >> /etc/rc.d/rc.local
    
    • 修改最大文件打开数

    Linux默认配置的最大文件打开数为1024,若Kafka的写入和消费方比较多,会很容易超过默认值,抛出"too many open files"异常,导致broker异常关闭。

    #临时生效
    ulimit -n 102400
    #查看open files 个数
    ulimit -a | grep 'open files'   
                       
    #永久生效
    vim /etc/security/limits.conf            
    * soft nofile 102400
    * hard nofile 102400
    

    3.搭建zk集群

    搭建5个节点的zk集群,可保证在最多挂两个zk节点的情况下,zk集群依然可以正常对外提供服务。
    zk集群搭建步骤参见上篇博文:zookeeper-3.5.8集群搭建

    4. 中转机上配置一份Kafka

    下载解压

    从官网下载一份kafka_2.12-2.5.1程序压缩包,解压到当前目录。
    

    修改配置

    • 修改bin/kafka-server-start.sh文件

    配置日志打印目录、开放JMX端口、依赖的JDK,以及JVM内存。

    vim bin/kafka-server-start.sh
    
    export LOG_DIR="/var/log/kafka"
    export JMX_PORT="2020"
    export JAVA_HOME="/usr/local/jdk1.8.0_144"
    
    if [ "x$KAFKA_HE:AP_OPTS" = "x" ]; then 
    export KAFKA_HEAP_OPTS="-Xmx6G -Xms6G"
    fi
    
    • 修改bin/kafka-run-class.sh

    配置JVM的垃圾回收器G1参数。

    vim bin/kafka-run-class.sh
    
    export JAVA_HOME="/usr/local/jdk1.8.0_144"   #其他脚本调用该shell,需要JDK环境
    
    KAFKA_JVM_PERFORMANCE_OPTS="-server -XX:MetaspaceSize=96m -XX:+UseG1GC -XX:MaxGCPauseMillis=20 -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80"
    
    • 修改config/server.properties文件
    vim config/server.properties
    broker.id=10*
    listeners=PLAINTEXT://host_name:9090
    
    # 在写入量150MB/s,读取量300MB/s的情况下,使用以下两个配置,网络线程和磁盘IO线程平均空闲率大约30%。
    num.network.threads=6
    num.io.threads=12
    
    log.dirs=/data*/kafka-logs #根据具体情况而定
    
    log.retention.hours=48
    zookeeper.connect=zk1.bjehp.com:2181,zk2.bjehp.com:2181,zk3.bjehp.com:2181,zk4.bjehp.com:2181,zk5.bjehp.com:2181/kafka/talos  #注意修改zookeeper地址
    
    auto.create.topics.enable=false
    default.replication.factor=2
    
    #以下注释为Kafka默认参数,注意zk的连接时间与超时时间由0.8版本的6s提高到现版本的18s.
    #offsets.topic.replication.factor=3
    #transaction.state.log.replication.factor=3
    #transaction.state.log.min.isr=2 
    #group.initial.rebalance.delay.ms=3000
    
    #zookeeper.connection.timeout.ms=18000
    #zookeeper.session.timeout.ms=18000
    

    5. 在各个节点安装并启动Kafka

    安装

    • 同步安装包
    将中转机的Kafka安装包拷贝到本地/usr/local/目录
    
    • 根据机器实际情况修改server.properties配置文件
    vim /usr/local/kafka_2.12-2.5.1/config/server.properties
    broker.id=10*       #修改broker id参数
    log.dirs=/data*/kafka-logs      #根据实际情况修改log目录
    listeners=SASL_PLAINTEXT://hostname:9090        #修改hostname
    

    启动并验证

    nohup /usr/local/kafka_2.12-2.5.1/bin/kafka-server-start.sh /usr/local/kafka_2.12-2.5.1/config/server.properties > /dev/null 2>&1 &
    
    ps aux | grep kafka
    tailf /var/log/kafka/server.log
    
    netstat -tnlp | grep 9090
    netstat -tnlp | grep 2020
    

    停止

    /usr/local/kafka_2.12-2.5.1/bin/kafka-server-stop.sh
    

    6.服务运维

    定时清除日志

    vim /etc/cron.d/kafka-logclean     
    # 每天定时清除1天前的kafka日志文件
    5 4 * * * root find /var/log/kafka/*.log.* -type f -mtime +1 | xargs rm -f
    

    配置监控报警

    • 配置服务器的磁盘、内存、cpu load报警
    • 配置Kakfa节点端口报警

    总结

    本文介绍了Kakfa集群的详细搭建步骤,以及Linux系统和Kafka节点的参数调优。近些年随着Kafka版本不断迭代,之前的旧版本的bug(比如0.8版本)也不断被修复,并且不断有新功能涌现,比如流量配额、exactly-once语义等,使得Kafka集群越来越稳定,这将明显降低集群故障。Kafka在很多功能点的实现上有很多巧妙的设计,值得不断地深入学习和探索~~~

  • 相关阅读:
    IDEA常用快捷键整理(Mac OS X版本)
    转发与重定向的区别
    关于Navicat远程连接远程服务器的mysql 报错问题
    关于mac 系统如何通过终端 连接linux服务器 并传文件!
    Java中String和byte[]间的转换浅析
    选择排序Java版
    插入排序Java版
    JS知识点
    Excel 函数
    垂直滚动公告板
  • 原文地址:https://www.cnblogs.com/ljhbjehp/p/13945127.html
Copyright © 2011-2022 走看看