kafka、zookeeper单点部署及调优

MQ的工作模式:
    一对一(点对点):
        一个生产者对应一个消费者,生产者写入数据,消费者消费数据后,数据将在MQ中被删除。
    一对多(发布订阅):
        一个生产者可以对应多个消费者,生产者写入数据,消费者消费数据后,数据不会在MQ中被删除。

kafka的常用术语:
    kafka cluster(broker list):
        kafka集群。
        
    kafka Server (broker):
        指的是kafka集群的某个节点。
        
    Producer:
        生产者,即往kafka集群写入数据的角色。

    Consumer:
        消费者,即从kafka集群中读取数据的角色。一个消费者隶属于一个消费者组。
        
    Concumer Group:
        消费者组,里面有一个或多个消费者。
        
    Topic:
        主题,是一个逻辑概念,用于区分业务,一个主题最少要有1个分区和一个副本。
        
    Partition:
        分区,分区可以暂时理解为分区编号。
    
    replica:
        副本,副本是实际存储数据的地方,分为两种角色,即leader和follower。
           leader:
                负责读写。
           follower:
                负责从leader节点同步数据,无法对集群外部提供任何服务。当leader无法访问时,follower会接管leader的角色。
        
        AR:
            所有的副本,包含leader和follower副本。
        ISR:
            表示和leader同步的所有副本集合。
        OSR:
            表示和leader不同步的所有副本集合。
            

    zookeeper集群:
        kafka 0.9之前的版本维护消费者组的offset,之后kafka内部的topic进行维护。
        协调kafka的leader选举,控制器协调者选举等....
        
        
Q1: 分区和副本有啥区别?
    分区可以暂时理解为分区编号,它包含该分区编号的所有副本,和磁盘的分区没关系。
    副本是实际存储数据的地方,
    
Q2: offset存储在kafka集群,客户端在kafka集群任意一个节点如何获取偏移量。
    通过内部的消费者组的偏移量读取即可。("__consumer_groups")
    
    
    
部署单点zookeeper节点:
    1.解压软件包
tar xf apache-zookeeper-3.8.0-bin.tar.gz -C /oldboyedu/softwares/
    
    2.拷贝配置文件
cp /oldboyedu/softwares/apache-zookeeper-3.8.0-bin/conf/{zoo_sample.cfg,zoo.cfg}

    3.配置环境变量
cat > /etc/profile.d/kafka.sh <<'EOF'
#!/bin/bash

export ZK_HOME=/oldboyedu/softwares/apache-zookeeper-3.8.0-bin
export PATH=$PATH:$ZK_HOME/bin
EOF
source /etc/profile.d/kafka.sh

    4.启动zookeeper服务
zkServer.sh start
zkServer.sh status


    5.连接zookeeper服务
zkCli.sh 
ss -ntl | grep 2181


    温馨提示:
        如果出错了请查看日志拍错即可。


部署kafka单点:
    1.解压软件包
tar xf kafka_2.13-3.2.1.tgz -C /oldboyedu/softwares/

    2.配置环境变量
cat > /etc/profile.d/kafka.sh <<'EOF'
#!/bin/bash

export ZK_HOME=/oldboyedu/softwares/apache-zookeeper-3.8.0-bin
export KAFKA_HOME=/oldboyedu/softwares/kafka_2.13-3.2.1
export PATH=$PATH:$ZK_HOME/bin:$KAFKA_HOME/bin
EOF
source /etc/profile.d/kafka.sh

    3.修改配置文件
vim /oldboyedu/softwares/kafka_2.13-3.2.1/config/server.properties 
...
# 修改kafka的唯一标识ID
broker.id=101
# 指定数据存储路径
log.dirs=/oldboyedu/data/kafka3.2.1
# 指定kafka的源数据在zookeeper节点的存储路径
zookeeper.connect=10.0.0.101:2181/oldboyedu-linux82-kafka3.2.1

    4.启动kafka服务
kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties

    5.检查kafka节点是否启动
ss -ntl | grep 9092

    6.查看zookeeper的源数据信息
ls /oldboyedu-linux82-kafka3.2.1/brokers/ids

    7.停止服务
kafka-server-stop.sh 

topic管理:
创建:
    kafka-topics.sh --bootstrap-server 10.0.0.101:9092  --topic oldboyedu-linux82  --create
        创建默认的分区数和副本数.

    kafka-topics.sh --bootstrap-server 10.0.0.101:9092  --topic oldboyedu-linux83 --create --partitions 3
        创建3个分区数的topic。
        
    kafka-topics.sh --bootstrap-server 10.0.0.101:9092  --topic oldboyedu-linux84 --create --partitions 5  --replication-factor 2
        创建5个分区数和2个副本。
        
查看:
    kafka-topics.sh --bootstrap-server 10.0.0.101:9092  --list
        查看所有topic的名称列表信息。
        
    kafka-topics.sh --bootstrap-server 10.0.0.101:9092  --describe
        查看所有topic的详细信息。
        
    kafka-topics.sh --bootstrap-server 10.0.0.101:9092  --describe --topic oldboyedu-linux83
        查看指定的topic的详细信息。
        
    
修改:
    kafka-topics.sh --bootstrap-server 10.0.0.101:9092  --alter --topic oldboyedu-linux82 --partitions 5
        修改分区数量,将分区数调大。
        
    彩蛋: kafka是否支持将分区数量调小呢?为什么?
        答案是否定的,如果将分区数调小,那么多余的数据就很难处理。
        
        
删除:
    kafka-topics.sh --bootstrap-server 10.0.0.101:9092  --delete --topic  oldboyedu-linux83

生产者和消费者组:
生产者:
    kafka-console-producer.sh --bootstrap-server 10.0.0.101:9092  --topic oldboyedu-linux82
        向"oldboyedu-linux82"交互式写入数据。
    

消费者:
    kafka-console-consumer.sh --bootstrap-server 10.0.0.101:9092  --topic oldboyedu-linux82
        从最新的偏移量开始消费。
        
    kafka-console-consumer.sh --bootstrap-server 10.0.0.101:9092  --topic oldboyedu-linux82 --from-beginning
        从最开始的偏移量开始消费。
        
     kafka-console-consumer.sh --bootstrap-server 10.0.0.101:9092  --topic oldboyedu-linux82 --consumer-property  group.id=linux82-elk 
        将消费者指定加入到哪个消费者组。


消费者组维护:
    kafka-consumer-groups.sh --bootstrap-server  10.0.0.101:9092 --list
        查看现有的消费者组列表。
        
    kafka-consumer-groups.sh --bootstrap-server  10.0.0.101:9092 --describe --group console-consumer-44622
        查看指定的消费者组详细信息。
        
    kafka-consumer-groups.sh --bootstrap-server  10.0.0.101:9092 --describe --all-groups
        查看所有消费者组的详细信息。
        
    kafka-consumer-groups.sh --bootstrap-server  10.0.0.101:9092 --delete --group console-consumer-44622
        删除指定的消费者组。
        
    kafka-consumer-groups.sh --bootstrap-server  10.0.0.101:9092 --delete --all-groups
        删除所有的消费者组。
    
    
    彩蛋1: 消费者组的消费者分区的策略有哪些?
        rr:
            基于轮询的方式分区。
        range:
            基于范围的方式分区,使用"partition / consumer ",使用该值进行范围分配。如果有余数,剩下的是随机分配。
            

    彩蛋2: 同一个消费者组有没有可能消费者分配不到partition呢?请说明原因?
        在同一个消费者组内的消费者数量大于分区数量,就有可能有的消费者分配不到partition的情况。
        
        
    彩蛋3: 为什么要将多个consumer加入到同一个consumer group呢?
        1)防止消费者挂点,提高冗余;
        2)提高读取效率,能够解决数据延迟的问题;       
        
调优KAFKA的堆内存大小:
    1)修改启动脚本
vim /oldboyedu/softwares/kafka_2.13-3.2.1/bin/kafka-server-start.sh
...
# 修改默认的堆内存大小,生产环境中推荐设置6GB
if [ "x$KAFKA_HEAP_OPTS" = "x" ]; then
    # export KAFKA_HEAP_OPTS="-Xmx1G -Xms1G"
    export KAFKA_HEAP_OPTS="-Xmx256m -Xms256m"
fi


    2)重启kafka服务
kafka-server-stop.sh 
kafka-server-start.sh  -daemon $KAFKA_HOME/config/server.properties
    
    
    3)查看对内存大小验证。
jmap -heap `jps | grep -i kafka | awk '{print $1}'`


KAFKA集群扩容:
    1)安装kafka环境
data_rsync.sh /oldboyedu/softwares/kafka_2.13-3.2.1/
data_rsync.sh /etc/profile.d/kafka.sh 


    2)102节点修改kafka的配置文件
vim /oldboyedu/softwares/kafka_2.13-3.2.1/config/server.properties 
...
broker.id=102

    3)103节点修改kafka的配置文件
vim /oldboyedu/softwares/kafka_2.13-3.2.1/config/server.properties 
...
broker.id=103


    4)各节点启动kafka环境
source /etc/profile.d/kafka.sh ; kafka-server-start.sh  -daemon $KAFKA_HOME/config/server.properties

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值