Kafka笔记7
Kafka提供了一些命令行工具,用于管理集群变更。这些工具使用Java实现,Kafka提供了一些脚本调用这些Java类。
9.1主题操作
使用Kafka-topics.sh工具可以执行主题大部分工作,我们可以用它创建,修改,删除和查看集群的主题。要使用该工具的全部功能,需要通过—zookeeper参数提供zookeeper连接字符串。
创建主题
创建主题需要三个参数:主题名,复制系数和分区
例如:创建名为my-topic的主题,包含8个分区,每个分区拥有2个副本
Kafka-topics.sh —zookeeper zoo1.example.com:2181/kafka-cluster —create my-topic —replicaton-factor 2 —partition 8
增加分区
增加分区主要是为了扩展主题容量或者降低单个分区的吞吐量,如果单个消费者群组内运行更多消费者,也需要增加分区。
例如:将my-topic主题分区数量增加到16
Kafka-topics.sh —zookeeper zoo1.example.com:2181/kafka-cluster —alter —topic my-topic —partition 16
无法减少分区数量,如果一定要删,可以先删除主题,然后重新创建
删除主题
为了删除主题,broker的delete.topic.enable必须为true,如果为false,删除主题的请求会被忽略。
Kafka-topics.sh —zookeeper zoo1.example.com:2181/kafka-cluster —delete —topic my-topic
列出集群所有主题
Kafka-topics.sh —zookeeper zoo1.example.com:2181/kafka-cluster —list
列出所有主题详细信息
Kafka-topics.sh —zookeeper zoo1.example.com:2181/kafka-cluster —describe
使用—topics-with-overrides参数可以找到所有包含覆盖配置的主题,它会列出包含了与集群不一样的配置的主题。
有两个参数可以找出有问题的分区。
使用—under-replicated-partitions参数可以列出所有包含不同步副本的分区。
使用—unavailable-partitions参数的可以列出所有没有首领的分区。这些分区已经离线,对于生产者和消费者都不可用。
Kafka-topics.sh —zookeeper zoo1.example.com:2181/kafka-cluster —describe —under-replicated-partitions
9.2消费者群组
Kafka有两个地方保存消费者群组信息,旧版本在zookeeper,新版本在broker,Kafka-consumer-groups.sh 可以列出上述两种消费者群组。它可以用于删除消费者群组和偏移量,旧版本需要zookeeper地址,新版本需要broker地址。
列出并描述群组
示例:列出旧版本消费者群组
Kafka-consumer-groups.sh —zookeeper zoo1.example.com:2181/kafka-cluster —list
示例:列出新版本消费者群组
Kafka-consumer-groups.sh —new-consumer —bootstrap-server kafka1.example.com:9092/kafka-cluster —list
对于列出任意群组来说,使用—describe代替—list,通过—group指定特定群组就可以获取群组的详细信息。它会列出群组所有主题的信息和每个分区偏移量。
示例:列出旧版本消费者群组testgroup的详细信息
Kafka-consumer-groups.sh —new-consumer —bootstrap-server kafka1.example.com:9092/kafka-cluster —describe —group test group
删除消费者群组
只有旧版本消费者客户端支持删除群组。删除群组将从zookeeper删除群组和所有偏移量。执行操作之前,必须关闭所有消费者。
示例:删除消费者群组testgroup
Kafka-consumer-groups.sh —zookeeper zoo1.example.com:2181/kafka-cluster —delete —group test group
该命令也可以用于不删除整个群组的情况下删除单个主题的偏移量。(删除之前,必须关闭消费者)
示例:从消费者群组testgroup删除my-topic的主题偏移量。
Kafka-consumer-groups.sh —zookeeper zoo1.example.com:2181/kafka-cluster —delete —group test group —topic my-topic
偏移量管理
除了可以显示和删除消费者群组的偏移量之外,还可以获取偏移量,并保存批次的最新偏移量,从而实现偏移量重置。
1.导出偏移量
可以使用Kafka-run-class.sh调用底层Java类实现导出,会生成一个文件,包含分区和偏移量信息
示例:将群组testgroup的偏移量导出到offsets文件
Kafka-run-calss.sh kafka.tools.ExportZkoffsets —zkconnect zoo1.example.com:2181/kafka-cluster —group testgroup —output-file offsets
2.导入偏移量
导入偏移量之前,必须先关闭消费者。
示例:从offsets文件将偏移量导入消费者群组testgroup
Kafka-run-calss.sh kafka.tools.ImportZkoffsets —zkconnect zoo1.example.com:2181/kafka-cluster —group testgroup —input-file offsets
9.3动态配置变更
我们可以在集群运行状态时覆盖主题配置和客户端配置。不管是在工具还是文档,它们所说的动态配置参数都是基于主题或客户端的,都是可以被覆盖的。
覆盖主题的默认配置
更改主题配置的命令格式如下:
Kafka-configs.sh —zookeeper zoo1.example.com:2181/kafka-cluster -alter —entitiy-type topics —entity-name <topicname> —add-config key=value[key=value]
示例:将主题my-topic的消息保留时间设为1小时
Kafka-configs.sh —zookeeper zoo1.example.com:2181/kafka-cluster -alter —entitiy-type topics —entity-name my-topic —add-config retention.ms=3600000
覆盖客户端的默认配置
对于Kafka客户端来说,只能覆盖生产者配额和消费者配额。这两个参数都以字节每秒为参数,表示客户端每个broker上的生成速率和消费速率
更改客户端配置的命令如下:
Kafka-configs.sh —zookeeper zoo1.example.com:2181/kafka-cluster —alter —entity-type clients —entity-name <client id>
—add-config key=value
可用的客户端配置参数,producer_bytes-rate,consumer_bytes_rate
列出被覆盖的配置
使用命令行参数可以列出所有被覆盖的配置,从而用于检查主题和客户端配置。示例:列出主题my-topic所有被覆盖的配置
Kafka-configs.sh —zookeeper zoo1.example.com:2181/kafka-cluster —describe —entity-type topics —entity-name my-topic
移除被覆盖的配置
动态的配置完全可以被移除,从而恢复到集群的默认配置。可以使用alter命令和—delete-config参数来删除被覆盖的配置。
示例:删除主题my-topic的retention.ms覆盖配置
Kafka-configs.sh —zookeeper zoo1.example.com:2181/kafka-cluster
—alter —entity-type topics —entity-name my-topic
—delete-config retention.ms
9.4分区管理
Kafka提供两个脚本管理分区,一个用于重新选举首领,一个用于将分区分配给broker,结合这两个工具,就可以实现集群流量的负载均衡。
使用多个分区副本可以提升可靠性,不过只有其中一个副本可以成为分区首领,只有首领所在broker可以进行生产和消费活动。Kafka将副本清单第一个同步副本选为首领,但在关闭并重启broker之后,并不会自动恢复原先的首领身份。broker有一个配置可以用于启动自动首领再均衡,不过不建议在生产环境使用该功能。
通过触发首选的副本选举,可以让broker重新获得首领。当该事件被触发时,集群控制器会为分区重新选择理想的首领。也可以通过Kafka-preferred-replica-election.sh 工具手动触发选举。
示例:启动首选的副本选举
Kafka-preferred-replica-election.sh —zookeeper zoo1.example.com:2181/kafka-cluster
进行选举时,集群的元数据必须被写到zookeeper上,如果元数据超过了节点运行的大小(默认时1MB),选举就会失败。
这个时候需要把分区清单信息写到json文件,分多个步骤进行:
示例:通过在partitions.json文件里指定分区清单来启动副本选举
Kafka-perferred-replica-election.sh —zookeeper zoo1.example.com:2181/kafka-cluster —path-to-json-file partitons.json
9.4.2修改分区副本
有时需要修改分区副本,以下时需要修改分区副本的场景
1.主题分区在整个集群的不均衡分布造成集群负载不均衡
2.broker离线造成分区不同步
3.新加入的broker需要从集群获得负载。
可以使用Kafka-reassign-partitions.sh 工具来修改分区。
第一步:根据broker清单和主题清单生成一组迁移步骤;
第二步,执行迁移步骤;
第三步:可以使用生成的迁移步骤验证分区重分配的进度和完成情况。
示例:为topics.json文件里的主题生成迁移步骤,将这些主题迁移到broker0和broker1上。
Kafka-reassign-partitions.sh —zookeeper zoo1.example.com:2181/kafka-cluster —generate —topics-to-move-json-file topics.json —broker-list 0,1
这个工具会在控制台输出两个json,分别描述里当前分区和建议分区分配方案,可以把第一个json保存起来,以备回滚。
第二个json应该被保存到另一个文件,作为Kafka-reassign-partitons.sh工具的输入来执行第二个步骤。
示例:使用reassign.json来执行建议的分区分配方案
Kafka-reassign-partitions.sh —zookeeper zoo1.example.com:2181/kafka-cluster —execute —reassignment-json-file reassign.json
该命令会将指定分区的副本重新分配到新的broker上。
在重分配进行过程中或完成之后,可以使用Kafka-reassign-partitions.sh工具验证重分配的状态。
示例:验证reassign.json文件里指定的分区重分配情况。
Kafka-reassign-partitions.sh —zookeeper zoo1.example.com:2181/kafka-cluster —verify —reassignment-json-file reassign.json
9.4.3修改复制系数
分区重分配工具提供了一些特性,可以改变分区的复制系数
9.4.4转储日志片段
如果需要查看某个特定消息的内容,可以使用工具来解码分区的日志片段。该工具可以让你在不读取消息的情况下查看消息的内容。它接受一个以逗号分隔的日志片段文件清单作为参数,并打印出每个消息的概要信息和数据内容。
示例:解码日志片段0001.log,显示消息的概要信息
Kafka-run-class.sh kafka.tools.DumpLogSegments —files 0001.log
示例:解码日志片段0001.log,显示消息的数据内容
Kafka-run-class.sh kafka.tools.DumpLogSegments —files 0001.log —print-data-log
这个片段也可以用于检查日志片段的索引文件。有两个参数可以用于指定不同程度的验证,—index-sanity-check将会检查无用的索引。而—verify-index-only将会检查索引的匹配度,但不会打印出所有索引。
示例:验证日志片段0001.log索引文件的正确性
Kafka-run-class.sh kafka.tools.DumpLogSegments —files 0001.index,0001.log —index-sanity-check
9.4.5副本验证
分区复制原理与消费者客户端类似,跟随者broker定期将上一个偏移量到当前偏移量之间的数据复制到磁盘上。如果复制停止并重启,它会从上一个检查点继续复制,如果之前复制的日志被删除,跟随者不做任何补偿。
可以使用Kafka-replica-verification.sh工具验证集群分区副本的一致性。它会从指定分区副本获取消息,并检查所有副本是否具有相同消息。使用正则表达式将待验证主题的名字传给他,还需要显示提供broker地址清单。
示例:对broker1和broker2上以my-开头的主题副本进行验证
Kafka-replica-verification.sh —broker-list kafka1.example.com:9092,kafka2.example.com:9092 —topic-white-list ‘my-.*’
9.5消费和生产
如果需要手动读取和生成消息,可以借助Kafka-console-consumer.sh和Kafka-console-producer.sh两个工具,它们包装Java客户端,让用户不需要编写应用程序就可以与Kafka主题进行交互。
9.5.1控制台消费者
Kafka-console-consumer.sh 工具提供一种从一个或多个主题读取消息的方式。消息被打印到标准输出,消息之间以空行分隔,默认情况下没有格式化。
有一些参数时必选的。
第一步:指定是否要使用新版本消费者,并指导Kafka地址。如果使用旧版本消费者,只需要提供—zookeeper参数,后面跟Kafka集群的连接字符串。
第二步:需要指定主题,有三个可选参数分别是
—topic
—whitelist
—blacklist
示例:使用旧版消费者读取单个主题my-topic
Kafka-console-consumer.sh —zookeeper
zoo1.example.com:2181/Kafka-cluster —topic my-topic
除了基本参数外,也可以把其它参数传给控制台消费者,可以通过两种方式:
第一:将配置参数写到一个文件,然后通过—consumer.config filename指定配置文件
第二:直接在命令行以—consumer-property key=value的格式传递一个或多个参数。
控制台消费者的其他常用配置:
—formatter classname
指定消息格式化器的类名,用于解码消息,默认是Kafka.tools.DefaultFormatter
—from-beginning
指定从最旧的偏移量读取数据,否则就从最新偏移量开始读取
—max-messages num
指定退出之前最多读取多少消息
—partition num
指定只读取ID为num的分区
读取偏移量主题
有时候我们需要指定提交的消费者群组的偏移量少多少,这个可以通过让控制台消费者读取一个特定__consumer__offsets来实现.
为了解码这个主题,需要使用Kafka.coordinator.GroupMetadataManager$OffsetsMessageFormatter格式化器。
示例:从偏移量主题读取一个消息
Kafka-console-consumer.sh —zookeeper zoo1.example.com:2181/kafka-cluster —topic __consumer__offsets —formatter ‘kafka.coordinator.GroupMetadataManager$OffsetsMessageFormatter’
9.5.2控制台生产者
Kafka-console-producer.sh工具可以用于想Kafka主题写入消息。默认情况下,一行时一个消息,键值以tab分隔,如果没有tab,那么键为null
有两个参数必须指定:
—broker-list参数指定了一个或多个broker,逗号分隔
—topic指定了目标主题
与控制台消费者一样,控制台生产者可以接受普通生产者的配置参数,通过两种方式实现:
第一:通过—producer.config file指定配置文件
第二:在命令行—producer-property key=value传递一个或多个参数
有很多参数可以调整行为:
—key-serializer classname
指定消息键的编码器名
—value-serializer classname
指定消息的value的编码器名
—compression-codec string
指定压缩类型
—sync
指定以同步方式生成消息,也就是说,发送下一个消息之前会等待当前消息得到确认。
9.7不安全的操作
移动集群控制器
取消分区重分配
移动待删除的主题
手动删除主题
Kafka笔记7的更多相关文章
- Kafka笔记整理(三):消费形式验证与性能测试
Kafka消费形式验证 前面的<Kafka笔记整理(一)>中有提到消费者的消费形式,说明如下: .每个consumer属于一个consumer group,可以指定组id.group.id ...
- Kafka笔记整理(一)
Kafka简介 消息队列(Message Queue) 消息 Message 网络中的两台计算机或者两个通讯设备之间传递的数据.例如说:文本.音乐.视频等内容. 队列 Queue 一种特殊的线性表(数 ...
- Kafka笔记—可靠性、幂等性和事务
这几天很忙,但是我现在给我的要求是一周至少要出一篇文章,所以先拿这篇笔记来做开胃菜,源码分析估计明后两天应该能写一篇.给自己加油~,即使没什么人看. 可靠性 如何保证消息不丢失 Kafka只对&quo ...
- Kafka笔记
最近做的一个项目需要跟Kafka打交道,学习了很多相关知识,就到这里来汇总一下. kafka是一个传递消息的系统,原本是用来快速记录海量log的,现在也经常用作消息队列.它主要由三个部分组成,prod ...
- kafka笔记-Kafka在zookeeper中的存储结构【转】
参考链接:apache kafka系列之在zookeeper中存储结构 http://blog.csdn.net/lizhitao/article/details/23744675 1.topic注 ...
- Kafka笔记--指定消息的partition规则
参数的设定:参考资料 不错的资料:http://blog.csdn.net/honglei915/article/details/37697655 http://developer.51cto.com ...
- Kafka笔记--监控系统KafkaOffsetMonitor
KafkaOffsetMonitor下载链接: http://download.csdn.net/detail/changong28/7930337github官方:https://github.co ...
- Kafka笔记--使用ubuntu为bocker(服务器)windows做producer和comsumer(客户端)
原文连接:http://www.cnblogs.com/davidwang456/p/4201875.html 程序仍然使用之前的一篇博文中的例子 :http://www.cnblogs.com/gn ...
- Kafka笔记--参数说明及Demo
参考资料:http://blog.csdn.net/honglei915/article/details/37563647参数说明:http://ju.outofmemory.cn/entry/119 ...
- Kafka笔记--分布式环境搭建
部署: http://www.cnblogs.com/likehua/p/3999538.html http://blog.csdn.net/kimmking/article/details/8263 ...
随机推荐
- C# 使用外部别名
原文:C# 使用外部别名 版权声明:博客已迁移到 http://lindexi.gitee.io 欢迎访问.如果当前博客图片看不到,请到 http://lindexi.gitee.io 访问博客.本文 ...
- 放大缩小,只需要使用这2个函数:SetWindowExtEx、SetViewportExtEx
相似函数: ScaleWindowExtEx.ScaleViewportExtEx 本例效果图: 代码文件: unit Unit1; interface uses Windows, Message ...
- Windows安装Linux子系统--安装GUI界面
原文:Windows安装Linux子系统--安装GUI界面 前段时间发现Windows可以安装Linux子系统了,恰逢电脑换了固态,还没装Linux,不如趁机体验一番! 1.准备工作 1.1.打开 ...
- AI2XAML's Bug
原文:AI2XAML's Bug My picture is like this: I use Adobe Illustator CS to draw the outline of that, I s ...
- WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形
原文:WPF,Silverlight与XAML读书笔记第三十九 - 可视化效果之3D图形 说明:本系列基本上是<WPF揭秘>的读书笔记.在结构安排与文章内容上参照<WPF揭秘> ...
- 组态DNS、搜索域名和主机名
一个.组态DNS和搜索领域 特别配置DNS该文件是/etc/resolv.conf:同时,我们可以ifcfg-eth0网卡的配置和其他配置文件中指定的. 演示样本: [root@instructor ...
- python 教程 第十章、 输入/输出
第十章. 输入/输出 1) 文件 poem = '''Programming is fun use Python!''' f = file('poem.txt', 'w') # open for ...
- VS2015中的快捷键
1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键“Ctrl + -”; 2)前进到下一个光标位置:“Ctrl + Shift + - ”. 2.复制/剪切/删除整行代码 ...
- libuv windows 下编译及使用出现的问题(异步IO)
1. 下载源码:http://dist.libuv.org/dist/ 我下载的是 v1.8.0 版本,打开可看见四个文件,如下: 说明:.tar.gz 版本的是可以在Linux和Windows下编译 ...
- 专访Jeffrey Richter:Windows 8是微软的重中之重
Jeffrey Richter 以其多本 Windows 核心技术的经典著作而闻名,同时,他深入掌握微软的 .NET 等一系列核心技术,他所创办的 Wintellect 公司与微软有密切的合作关系,他 ...