Kafka系列之脚本使用

概述

Kafka系列文章:

Kafka提供大量脚本,以Kafka_2.13-4.1.1版本为例,即Scala版本是2.13,Kafka版本是4.1.1:

  • 在bin目录下面,可用于Unix平台(包括Linux和Mac),有多达43个sh脚本;
  • kafka_2.13-4.1.1\bin\windows目录下,即提供给Windows系统使用,也有多达36个bat脚本。

    这些都是Kafka的命令行工具,主要包括服务和集群管理,配置,信息查看,Topic,客户端脚本:
  • connect-distributed.sh:启动分布式Kafka Connect集群
  • connect-mirror-maker.sh
  • connect-plugin-path.sh
  • connect-standalone.sh:启动单点Kafka Connect组件
  • kafka-acls.sh:授权管理脚本
  • kafka-broker-api-versions.sh:验证不同Kafka版本之间服务器和客户端的适配性
  • kafka-client-metrics.sh
  • kafka-cluster.sh
  • kafka-configs.sh:配置管理脚本
  • kafka-console-consumer.sh:消费者控制台
  • kafka-console-producer.sh:生产者控制台
  • kafka-consumer-groups.sh:消费者组相关信息
  • kafka-consumer-perf-test.sh:消费者性能测试
  • kafka-delegation-tokens.sh:管理Delegation Token
  • kafka-delete-records.sh:删除低水位的日志文件
  • kafka-dump-log.sh:查看Kafka消息文件内容
  • kafka-e2e-latency.sh
  • kafka-features.sh
  • kafka-get-offsets.sh:获取偏移量
  • kafka-jmx.sh
  • kafka-leader-election.sh
  • kafka-log-dirs.sh:Kafka消息日志目录信息
  • kafka-metadata-quorum.sh
  • kafka-metadata-shell.sh
  • kafka-mirror-maker.sh:不同数据中心集群复制工具
  • kafka-producer-perf-test.sh:生产者性能测试脚本
  • kafka-reassign-partitions.sh:分区重分配,修改主题副本
  • kafka-replica-verification.sh
  • kafka-run-class.sh:执行任何带main方法的Kafka类
  • kafka-server-start.sh:启动Kafka服务
  • kafka-server-stop.sh:停止Kafka服务
  • kafka-storage.sh
  • kafka-streams-application-reset.sh
  • kafka-topics.sh:Topic管理脚本
  • kafka-transactions.sh
  • kafka-verifiable-consumer.sh:可检验的Kafka消费者
  • kafka-verifiable-producer.sh:可检验的Kafka生产者
  • trogdor.sh:测试框架
  • zookeeper-security-migration.sh
  • zookeeper-server-start.sh:启动ZK服务
  • zookeeper-server-stop.sh:停止ZK服务
  • zookeeper-shell.sh:ZK客户端

知道得越多,发现自己越无知。本文不可能列举所有脚本使用方式,必要时还是得看脚本输出的帮助文档或官方文档。

默认情况下,不加任何参数或携带--help运行脚本文件,会得到该脚本的使用方法说明。

通常可使用kafka-console-consumer.shkafka-console-producer.sh脚本来测试Kafka生产和消费,kafka-consumer-groups.sh可查看和管理集群中的Topic,kafka-topics.sh通常用于查看消费组情况。

connect-mirror-maker.shkafka-mirror-maker.sh

都用于在Kafka集群之间镜像数据的工具,但它们有不同的实现方式和功能集。

kafka-mirror-maker.sh是Kafka的旧版镜像工具,基于消费者和生产者进行数据复制。是一个简单的命令行工具,配置相对简单,基于Kafka的消费者和生产者API工作,通过消费源集群的消息并生产到目标集群实现镜像。常用于开发或简单的生产环境,不推荐用于复杂的生产环境。扩展性有限,不支持高级的Kafka Connect特性。

命令实例:
./kafka-mirror-maker.sh --consumer.config consumer.properties --producer.config producer.properties --whitelist=".*"

connect-mirror-maker.sh是Kafka Connect框架的一部分,提供更高级的功能和更好的扩展性。通过配置文件进行详细配置,支持多种配置选项,灵活性更强,扩展性更好,适合复杂的生产环境的企业级管理工具。

支持Kafka Connect提供的各种特性:

  • 扩展插件
  • 转换和错误处理
  • 支持自动同步主题、消费组、ACL等配置
  • 支持自动检测和同步新创建的主题
  • 提供REST API式的更好用的监控和管理功能

命令实例:./connect-mirror-maker.sh --config mirror-maker.properties

基础

启动Kafka:
./kafka-server-start.sh server.properties

停止Kafka:
./kafka-server-stop.sh

配置

查看配置:
./kafka-configs.sh --zookeeper localhost:2181 --entity-type topics --entity-name mytopic --describe

对指定entity-type添加配置,其可选项:topics、brokers、users、clients、ips、client-metrics、groups:
./kafka-configs.sh --zookeeper localhost:2181 --alter --entity-type topics --entity-name mytopic --add-config 'max.message.bytes=50000000,flush.message=5'

删除配置:
./kafka-configs.sh --zookeeper localhost:2181 --alter --entity-type topics --entity-name mytopic --delete-config 'flush.message'

主题

创建主题:
./kafka-topics.sh --zookeeper node01:2181 --create --topic t_cdr --partitions 30 --replication-factor 2

其中,partitions指定主题分区数,replication-factor指定主题每个分区的副本数

partitions分区数:

  1. 分区数,控制主题将分片成多少个log。可显式指定,若不指定则会使用Broker配置文件server.properties中的num.partitions配置的数量
  2. 虽然增加分区数可以提供Kafka集群的吞吐量,但是过多的分区数或者或是单台服务器上的分区数过多,会增加不可用及延迟的风险。因为更多分区数,意味着需打开更多文件句柄、增加点到点的延时、增加客户端内存消耗。
  3. 分区数也限制consumer的并行度,即限制并行consumer消息的线程数不能大于分区数
  4. 分区数也限制producer发送消息是指定的分区。如创建主题时分区设置为1,producer发送消息时通过自定义的分区方法指定分区为2或以上的数都会出错的;这种情况可通过alter --partitions来增加分区数。

replication-factor副本

  1. 控制消息保存在几个broker(服务器)上,一般情况下等于broker的个数。
  2. 如果没有在创建时显示指定或通过API向一个不存在的主题生产消息时会使用broker(server.properties)中的default.replication.factor配置数量

查看所有主题列表:
./kafka-topics.sh --zookeeper node01:2181 --list

查看指定主题信息:
./kafka-topics.sh --zookeeper node01:2181 --describe --topic t_cdr

增加主题分区数
./kafka-topics.sh --zookeeper node01:2181 --alter --topic t_cdr --partitions 10

注意:分区数量只能扩大不能缩小。

删除主题:
./kafka-topics.sh --delete --zookeeper localhost:2181 --topic op_log

未设置delete.topic.enable=true时,是不会立即执行删除操作的,而是仅仅将指定主题标记为删除状态,之后会启动后台删除线程来删除。

分区

生成分区移动计划:
./kafka-reassign-partitions.sh --zookeeper localhost:2181 --broker-list "0" --topics-to-move-json-file ~/json/op_log_topic-to-move.json --generate

其中:

  • --broker-list:指定要挪动的Broker范围
  • --topics-to-move-json-file:指定配置文件

执行分区移动计划,--reassignment-json-file指定再分区后Assigned Replica的分布情况:
./kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file ~/json/op_log_reassignment.json --execute

检查当前再分区进度:
./kafka-reassign-partitions.sh --zookeeper localhost:2181 --reassignment-json-file ~/json/op_log_reassignment.json --verify

消费者组

查看存储在ZK中的消费组信息
./kafka-consumer-groups.sh --zookeeper localhost:2181 --list

查看存储在Kafka中的消费组信息
./kafka-consumer-groups.sh --new-consumer --bootstrap-server localhost:9092 --list

查看指定Group的详细消费情况,如当前消费进度,消息积压量等
./kafka-consumer-groups.sh --zookeeper localhost:2181 --group console-consumer-11 --describe

性能测试

生产者:
./kafka-producer-perf-test.sh --topic test --num-records 1000000 --throughput 1 --record-size 512 --producer-props bootstrap.servers=kafka1:9091,kafka2:9092,kakfa3:9093 acks=-1 linger.ms=0 compression.type=lz4

消费者:
./kafka-consumer-perf-test.sh --broker-list kafka1:9091,kafka2:9092,kakfa3:9093 --messages 10000000 --topic test

控制台

控制台生产主题数据:
./kafka-console-producer.sh --broker-list node86:9092 --topic t_cdr --request-required-acks -1 --producer-property compression.type=lz4

控制台消费主题数据:
./kafka-console-consumer.sh --zookeeper node01:2181 --topic t_cdr --group test-group --from-beginning --consumer-property enable.auto.commit=false
--from-beginning表示从头开始消费,可消费到之前的消息。

运行类

查看主题某分区偏移量最大(小)值
./kafka-run-class.sh kafka.tools.GetOffsetShell --topic hive-mdatabase-hostsltable --time -1 --broker-list node86:9092 --partitions 0

其中time为-1时表示最大值,time为-2时表示最小值

删除主题,慎用,只会删除zookeeper中的元数据,消息文件须手动删除
./kafka-run-class.sh kafka.admin.DeleteTopicCommand --zookeeper node01:2181 --topic t_cdr

查看消费者组下主题消费进度,参数--group必须要指定,可以不指定--topic,默认为所有主题:

bash 复制代码
./kafka-run-class.sh kafka.tools.ConsumerOffsetChecker --group pv

参数解释:

  • topic:创建主题名称
  • pid:分区编号
  • offset:表示该partition已经消费多少条message
  • logSize:表示该partition已经写多少条message
  • Lag:表示有多少条message没有被消费
  • Owner:表示消费者

kafka-run-class.sh脚本调用ConsumerOffsetChecker的main方法,所以也可通过Java代码来访问scala的ConsumerOffsetChecker类:

java 复制代码
import kafka.tools.ConsumerOffsetChecker;
/**
 * ConsumerOffsetChecker能查看到消费者消费的情况, 将信息打印到标准输出流中
 */
public class RunClass {
	public static void main(String[] args) {
		// group-1是消费者的group名称,可以在zk中
		String[] arr = new String[]{"--zookeeper=192.168.199.129:2181,192.168.199.130:2181,192.168.199.131:2181/kafka","--group=group-1"};
		ConsumerOffsetChecker.main(arr);
	}
}

参考

相关推荐
BD_Marathon1 小时前
【Kafka】
分布式·kafka
昵称为空C6 小时前
kafka的替代品redpanda部署与SpringBoot集成使用案例
spring boot·后端·kafka
if_else人生10 小时前
人工智能与区块链:打造未来数字经济的新基石
kafka
2501_9418108311 小时前
5G技术:如何推动智慧城市建设,提升城市管理与生活质量
kafka
lang2015092813 小时前
Kafka延迟操作机制深度解析
分布式·python·kafka
2501_9416243321 小时前
云计算与边缘计算:未来数字化转型的双引擎
kafka
while(努力):进步21 小时前
人工智能的未来:如何改变我们的工作与生活
kafka
2501_941403761 天前
人工智能与机器学习:未来科技的核心驱动力
kafka
一只会写代码的猫1 天前
云原生与编程语言:如何应对现代应用的复杂性挑战
kafka