【kafka学习之三】kafka集群运维
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集群运维的更多相关文章
- PB 级大规模 Elasticsearch 集群运维与调优实践
PB 级大规模 Elasticsearch 集群运维与调优实践 https://mp.weixin.qq.com/s/PDyHT9IuRij20JBgbPTjFA | 导语 腾讯云 Elasticse ...
- 集群运维ansible
ssh免密登录 集群运维 生成秘钥,一路enter cd ~/.ssh/ ssh-keygen -t rsa 讲id_rsa.pub文件追加到授权的key文件中 cat ~/.ssh/id_rsa.p ...
- 阿里巴巴大规模神龙裸金属 Kubernetes 集群运维实践
作者 | 姚捷(喽哥)阿里云容器平台集群管理高级技术专家 本文节选自<不一样的 双11 技术:阿里巴巴经济体云原生实践>一书,点击即可完成下载. 导读:值得阿里巴巴技术人骄傲的是 2019 ...
- Elasticsearch 学习之携程机票ElasticSearch集群运维驯服记(强烈推荐)
转自: https://mp.weixin.qq.com/s/wmSTyIGCVhItVNPHcH7nsA 一.整体架构 为什么采用ES作为搜索引擎呢?在做任何事情的时候,不要一上来就急着了解怎么做这 ...
- kafka学习总结之集群部署和zookeeper
1. 集群部署 kafka集群的瓶颈主要在网络和磁盘上:kafka依赖于zookeeper,zookeeper集群的节点采用奇数个,3个节点允许一个节点失败,5个节点允许2个节点失败. 图 1 ka ...
- kafka学习(二)-zookeeper集群搭建
zookeeper概念 ZooKeeper是一个分布式的,开放源码的分布式应用程序协调服务,它包含一个简单的原语集,分布式应用程序可以基于它实现同步服务,配置维护和命名 服务等.Zookeeper是h ...
- PB级大规模Elasticsearch集群运维与调优实践
导语 | 腾讯云Elasticsearch 被广泛应用于日志实时分析.结构化数据分析.全文检索等场景中,本文将以情景植入的方式,向大家介绍与腾讯云客户合作过程中遇到的各种典型问题,以及相应的解决思路与 ...
- PB级大规模Elasticsearch集群运维与调优实践【>>戳文章免费体验Elasticsearch服务30天】
[活动]Elasticsearch Service免费体验馆>> Elasticsearch Service自建迁移特惠政策>>Elasticsearch Service新用户 ...
- 使用Chef管理windows集群 | 运维自动化工具
但凡服务器上了一定规模(百台以上),普通的ssh登录管理的模式就越来越举步维艰.试想Linux发布了一个高危漏洞的补丁,你要把手下成百上千台机器都更新该补丁,如果没有一种自动化方式,那么至少要耗上大半 ...
随机推荐
- Centos 使用 docker
公司linux服务器基本使用的Centos,以下切换为Centos进行docker的操作. 查看系统版本 [root@Sonar-104 ~]# cat /etc/redhat-release Cen ...
- python pytest测试框架介绍三
之前介绍了pytest以xUnit形式来写用例,下面来介绍pytest特有的方式来写用例 1.pytest fixture实例1 代码如下 from __future__ import print_f ...
- Unity3D笔记十七 Unity3D生命周期
一个游戏组件的脚本有一个生命周期——一开始实例化,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见 本文主要讨论常见脚本的的生命周期 ...
- jQuery里面ajax请求的封装
为了避免ajax漫天飞,我们需要对jQuery的代码进行封装,封装代码: function api_request(name, params, cb, scope, async, el) { if ( ...
- Django之数据聚合函数 annotate
在我们的博客侧边栏有分类列表,显示博客已有的全部文章分类.现在想在分类名后显示该分类下有多少篇文章,该怎么做呢?最优雅的方式就是使用 Django 模型管理器的annotate方法. 模型回顾 回顾一 ...
- 公司HBase基准性能测试之结果篇
上一篇文章<公司HBase基准性能测试之准备篇>中详细介绍了本次性能测试的基本准备情况,包括测试集群架构.单台机器软硬件配置.测试工具以及测试方法等,在此基础上本篇文章主要介绍HBase在 ...
- POJ-2029 Get Many Persimmon Trees(动态规划)
Get Many Persimmon Trees Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 3987 Accepted: 2 ...
- Scala学习笔记(1)-基本类型归纳
1.小试牛刀 使用Scala自带的REPL shell(Read Evaluate Print Loop)学习和尝试Scala语言库,创建的变量在会话期间都是有效的. Ctrl+D可退出REPL sh ...
- Django运算符表达式
在html页面中,加入运算符表达式,进行逻辑判断.可参考手册.我用的Django是2.1版本 view.py中的代码: from django.shortcuts import render from ...
- ArcGIS API for javascript开发笔记(六)——REST详解及如何使用REST API调用GP服务
感谢一路走来默默支持和陪伴的你~~~ -------------------欢迎来访,拒绝转载-------------------- 一.Rest API基础 ArcGIS 平台提供了丰富的REST ...