kafka集群维护
一、kafka集群启停
#启动kafka
/home/cluster/kafka211/bin/kafka-server-start.sh -daemon /home/cluster/kafka211/config/server.properties

#关闭kafka
/home/cluster/kafka211/bin/kafka-server-stop.sh

二、kafka集群基本信息实时查看和修改
#列出所有有效主题
/home/cluster/kafka211/bin/kafka-topics.sh --list --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181

#查看特定主题
/home/cluster/kafka211/bin/kafka-topics.sh --describe --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181 --topic REC-CBBO-MSG-TOPIC

#创建主题 尽量不要使用下划线"_"或者点好".",可以使用横线"-"
/home/cluster/kafka211/bin/kafka-topics.sh --create --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181 --replication-factor 3 --partitions 17 --topic REC-CBBO-MSG-TOPIC

#修改主题 如果主题创建了之后发现分区不够用,可以增加,不可以减少
/home/cluster/kafka211/bin/kafka-topics.sh --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181 --alter --topic REC-CBBO-MSG-TOPIC --partitions 50

#删除主题 delete.topic.enable要设置为true
/home/cluster/kafka211/bin/kafka-topics.sh --delete --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181 --topic REC-CBBO-MSG-TOPIC

#控制台当作生产者

kafka-console-producer.sh --broker-list node1:9092,node2:90092,node3:9092 --topic t0425

#控制台当作消费者

./kafka-console-consumer.sh --zookeeper node3:2181,node4:2181,node5:2181 --topic t0422

#查看producer生产消息的最大位置

./kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list node1:9092 --topic t0426 --time -1

-1表示查询某个主题各个分区当前最大的消息位移值(注意,这里的位移值不是consumer端的位移,而是指消息在每个分区的位置)
如果要查询曾经生产过的最大消息数,那么只运行上面这条命令然后把各个分区的结果相加就可以了

#如果查询集群中某个topic当前消息数,还需要运行下面命令:
/kafka-run-class.sh kafka.tools.GetOffsetShell --broker-list node1:9092 --topic t0426 --time -2
-2表示去获取当前各个分区的最小位移。之后把运行第一条命令的结果与刚刚获取的位移之和相减就是集群中该topic的当前消息总数

三、kafka集群leader平衡机制

问题:当一个broker停止或者crashes时,所有本来将它作为leader的分区将会把leader转移到其他broker上去,极端情况下,会导致同一个leader管理多个分区,导致负载不均衡,同时当这个broker重启时,如果这个broker不再是任何分区的leader,kafka的client也不会从这个broker来读取消息,从而导致资源的浪费。

解决思路:

kafka中有一个被称为优先副本(preferred replicas)的概念。如果一个分区有3个副本,且这3个副本的优先级别分别为0,1,2,根据优先副本的概念,0会作为leader 。当0节点的broker挂掉时,会启动1这个节点broker当做leader。当0节点的broker再次启动后,会自动恢复为此partition的leader。不会导致负载不均衡和资源浪费,这就是leader的均衡机制。

#leader手动平衡
/home/cluster/kafka211/bin/kafka-preferred-replica-election.sh --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181
#leader自动平衡 server.properties 参数配置
auto.leader.rebalance.enable=true

注意:kafka创建主题时指定副本数R和分区数P,那么总副本数为 R*P,这些副本均匀的分布到各个broker机器上;

其中对于每个分区都有R个副本,其中有一个leader,其他都是follow

四、kafka集群分区日志迁移
1、迁移topic数据到其他broker
1.1写json文件 格式
cat topics-to-move.json
{
"topics":[{"topic","foo1"},{"topic","foo2"}],
"version":1
}

1.2使用generate生成迁移计划 只是生成迁移计划 并未迁移
bin/kafka-reassign-partitions.sh --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181 --topics-to-move-json-file topics-to-move.json --broker-list "5,6" --generate

Current partition replica assignment  指当前配置  要保存 用来回滚

Proposed partition reassignment configuration 指生成的迁移计划  保存到expand-cluster-reassignment.json

1.3使用-execute执行计划 执行前最好保存当前的分配情况 以防出错回滚
将上一步生成的执行计划json数据保存到expand-cluster-reassignment.json
bin/kafka-reassign-partitions.sh --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181 --reassignment-json-file expand-cluster-reassignment.json --execute

1.4使用-verify验证是否已经迁移完成
bin/kafka-reassign-partitions.sh --zookeeper 134.32.123.101:2181,134.32.123.102:2181,134.32.123.103:2181 --reassignment-json-file expand-cluster-reassignment.json -verify

2、迁移某个topic的某些特定的partition的数据到其他broker 步骤与上面一样 但是json文件如下
cat custom-reassignment.json
{
"version":1,"partitions":[{"topic":"foo1","partition":0,"replicas":[5,6]},{"topic":"foo2","partition":1,"replicas":[2,3]}]
}
可以指定到topic的分区编码

注意:迁移会导致leader失衡 需要使用平衡命令 重新平衡

五、集群操作日志清理

5.1 了解linux查看空间的命令

#查看目录空间的分配和使用情况 df -h

[cluster@PCS103 ~]$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/rhel-root 100G .7G 96G % /
devtmpfs 95G 95G % /dev
tmpfs 95G 95G % /dev/shm
tmpfs 95G 722M 94G % /run
tmpfs 95G 95G % /sys/fs/cgroup
/dev/sda2 1016M 148M 868M % /boot
/dev/sda1 200M 9.5M 191M % /boot/efi
/dev/mapper/vgdata-data02 .0T .5G 1017G % /data2
/dev/mapper/vgdata-data01 .0T 12G 1013G % /data1
/dev/mapper/rhel-home 100G 100G 20K % /home
/dev/loop0 .6G .6G % /mnt/cdrom

可以看到/home 几乎已经满了

#查看当前目录所占空间大小 du -sh

[cluster@PCS101 ~]$ du -sh
.7G .

#查看当前目录下每个文件以及目录所占空间大小 du -h

[cluster@PCS101 ~]$ du -h
472K ./zookeeper/src/recipes
.
.
.
20M ./zookeeper/src
.0K ./zookeeper/data
./zookeeper/logs
61M ./zookeeper
61M .

5.2 kafka操作日志  清理

kafka/logs目录下会有操作日志  如controller.log  server.log state-change.log 等  非常多  ,根据kafka/config/log4j.properties可以看到 每天都会生成,而且有几个的日志级别是

trace,这样会造成空间迅速被占满,需要定期清理

需要做的是:

(1)修改日志级别   trace改成info

(2)写个脚本  定期清理 kafka/logs下日志   rm  -rf  kafka/logs/*

【kafka学习之三】kafka集群运维的更多相关文章

  1. PB 级大规模 Elasticsearch 集群运维与调优实践

    PB 级大规模 Elasticsearch 集群运维与调优实践 https://mp.weixin.qq.com/s/PDyHT9IuRij20JBgbPTjFA | 导语 腾讯云 Elasticse ...

  2. 集群运维ansible

    ssh免密登录 集群运维 生成秘钥,一路enter cd ~/.ssh/ ssh-keygen -t rsa 讲id_rsa.pub文件追加到授权的key文件中 cat ~/.ssh/id_rsa.p ...

  3. 阿里巴巴大规模神龙裸金属 Kubernetes 集群运维实践

    作者 | 姚捷(喽哥)阿里云容器平台集群管理高级技术专家 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击即可完成下载. 导读:值得阿里巴巴技术人骄傲的是 2019 ...

  4. Elasticsearch 学习之携程机票ElasticSearch集群运维驯服记(强烈推荐)

    转自: https://mp.weixin.qq.com/s/wmSTyIGCVhItVNPHcH7nsA 一.整体架构 为什么采用ES作为搜索引擎呢?在做任何事情的时候,不要一上来就急着了解怎么做这 ...

  5. kafka学习总结之集群部署和zookeeper

    1.  集群部署 kafka集群的瓶颈主要在网络和磁盘上:kafka依赖于zookeeper,zookeeper集群的节点采用奇数个,3个节点允许一个节点失败,5个节点允许2个节点失败. 图 1 ka ...

  6. kafka学习(二)-zookeeper集群搭建

    zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...

  7. PB级大规模Elasticsearch集群运维与调优实践

    导语 | 腾讯云Elasticsearch 被广泛应用于日志实时分析.结构化数据分析.全文检索等场景中,本文将以情景植入的方式,向大家介绍与腾讯云客户合作过程中遇到的各种典型问题,以及相应的解决思路与 ...

  8. PB级大规模Elasticsearch集群运维与调优实践【>>戳文章免费体验Elasticsearch服务30天】

    [活动]Elasticsearch Service免费体验馆>> Elasticsearch Service自建迁移特惠政策>>Elasticsearch Service新用户 ...

  9. 使用Chef管理windows集群 | 运维自动化工具

    但凡服务器上了一定规模(百台以上),普通的ssh登录管理的模式就越来越举步维艰.试想Linux发布了一个高危漏洞的补丁,你要把手下成百上千台机器都更新该补丁,如果没有一种自动化方式,那么至少要耗上大半 ...

随机推荐

  1. 23种设计模式之状态模式(State)

    状态模式是一种对象的行为型模式,允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类.状态模式封装了状态的转换过程,但是它需要枚举可能的状态,因此,需要事先确定状态种类,这也导致在状 ...

  2. 浅析重定向与反弹Shell命令

    0×01    简介 反弹shell在漏洞证明和利用的过程中都是一个直接有力的手段.由于安全工作或者学习的需要,我们或多或少都会接触到各种反弹shell的命令,于是就有了这个能稍微帮助初学者理解的文档 ...

  3. 【Android】Android import和export使用说明 及 export报错:jarlist.cache: Resource is out of sync with the file syst解决

    在Android开发export项目时发现有时会报错,内容如下: Problems were encountered during export:  Error exporting PalmIdent ...

  4. tomcat如何配置启动时自动部署webapps下的war包

    1.找到 tomcat安装目录/conf/server.xml 2.修改host元素的配置如下: <Host name="localhost" appBase="w ...

  5. SAP全球企业官孙小群的生活智慧

    转自:http://www.programmer.com.cn/15373/ 一下为程序员杂志对孙小群(Xiaoqun Clever)的采访. 最早接触计算机是在高中,那时发现通过一个小小的Basic ...

  6. opengl学习笔记(五):组合变换,绘制一个简单的太阳系

    创建太阳系模型 描述的程序绘制一个简单的太阳系,其中有一颗行星和一颗太阳,用同一个函数绘制.需要使用glRotate*()函数让这颗行星绕太阳旋转,并且绕自身的轴旋转.还需要使用glTranslate ...

  7. IntelliJ IDEA学习记录

    一.下载 地址:官网下载地址 二.安装 运行安装程序,一路下一步.注意选择安装路径. 三.基本概念 project:相当于donet中的解决方案(solution),eclipse中的工作空间(wor ...

  8. 计蒜客 30990 - An Olympian Math Problem - [简单数学题][2018ICPC南京网络预赛A题]

    题目链接:https://nanti.jisuanke.com/t/30990 Alice, a student of grade 6, is thinking about an Olympian M ...

  9. 0005python中的静态方法和类方法

    #!/usr/bin/env python# coding=utf-8 __metaclass__ = type class StaticMethod: @staticmethod def foo() ...

  10. 排序的本质是什么 冒泡排序 bubble sort

    import random def getRandomNums(min=4, max=20): n = random.randint(min, max) arr = [random.randint(1 ...