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不安全的操作

移动集群控制器

取消分区重分配

移动待删除的主题

手动删除主题

猜你喜欢

转载自www.cnblogs.com/wangbin2188/p/10360345.html