常用工具备忘录

基础工具 专栏收录该内容
3 篇文章 0 订阅

把日常经常使用到了工具命令记录在此,持续更新。

JDK

JDK基础故障处理工具

MySQL

MySQL常用命令

Maven

使用maven-help-plugin查看插件详细信息,了解插件目标的默认绑定阶段

$ mvn help:describe -Dplugin=org.apache.maven.plugins:maven-source-plugin:2.1.1 -Ddetail
#在描述插件的时候,还可以省去版本信息,让Maven自动获取最新版本来进行表述,例如:
$ mvn help:describe -Dplugin=org.apache.maven.plugins:maven-compiler-plugin
#进一步简化,可以使用插件目标前缀替换坐标:
$ mvn help:describe -Dplugin=compiler
#如果想仅仅描述某个插件目标的信息,可以加上goal参数:
$ mvn help:describe -Dplugin=compiler -Dgoal=compile
#如果想让maven-help-plugin输出更详细的信息,可以加上detail参数:
$ mvn help:describe -Dplugin=compiler -Ddetail

跳过单元测试,跳过测试代码的编译

$ mvn package -DskipTests
#不仅仅想跳过测试运行,还想临时性地跳过测试代码的编译
$ mvn package -Dmaven.test.skip=true

动态指定要运行的测试用例

$ mvn test -Dtest=RandomTest
$ mvn test -Dtest=Random*Test
$ mvn test -Dtest=Random1Test,Random2Test
$ mvn test -Dtest=Random*Test,Random2Test
#如果maven-surefire-plugin找不到任何匹配的测试类,就会报错并导致构建失败,可以加上-DfailIfNoTests=false,告诉maven-surefire-plugin即使没有任何测试也不要报错:
$ mvn test -Dtest -DfailIfNoTests=false

通过以下命令以构建源代码 jar 包

$ mvn clean source:jar install -Dmaven.test.skip

使用以下命令来生成 IDE 的工程 Intellij Idea

$ mvn idea:idea

Hive

Hive命令

Redis

Info 指令

OBJECT 命令允许从内部察看给定 key 的 Redis 对象

DEBUG OBJECT

定位大 key

redis-cli -h 127.0.0.1 -p 7001 --bigkeys

如果你担心这个指令会大幅抬升 Redis 的 ops 导致线上报警,还可以增加一个休眠参数,下面这个指令每隔 100 条 scan 指令就会休眠 0.1s,ops 就不会剧烈抬升,但是扫描的时间会变长。

redis-cli -h 127.0.0.1 -p 7001 –-bigkeys -i 0.1

判断是否有内存碎片,INFO命令可以用来查询内存使用的详细信息,这里有一个mem_fragmentation_ratio的指标,它表示的就是Redis当前的内存碎片率。那么,这个碎片率是怎么计算的呢?其实,就是上面的命令中的两个指标used_memory_rss和used_memory相除的结果。大于 1.5 。这表明内存碎片率已经超过了50%。一般情况下,这个时候,我们就需要采取一些措施来降低内存碎片率了。

INFO memory

要查看和服务器端相连的每个客户端对输入缓冲区的使用情况,我们可以使用CLIENT LIST命令:

CLIENT LIST

算法

算法动画和可视化

Kafka

主题管理kafka-topics.sh

创建主题,创建主题时的分区副本都是按照既定的内部逻辑来进行分配的。

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --create --topic topic-create --partitions 4 --replication-factor 2

kafka-topics.sh 脚本中还提供了一个replica-assignment 参数来手动指定分区副本的分配方案。这种方式根据分区号的数值大小按照从小到大的顺序进行排列, 分区与分区之间用逗号“,” 隔开,分区内多个副本用冒号“:”隔开。并且在使用 replica-assignment 参数创建主题时不需要原本必备 的 partitions 和 replication-factor 这两个参数。

--replica-assignment <String:broker_id_for_part1_replica1:broker_id_for_part1_replica2,
 broker_id_for_part2_replica1:broker_id_for_part2_replica2 , ...>

在创建主题时我们还可以通过 config参数来设置所要创建主题的相关参数, 通过这个参数可以覆盖原本的默认配置。在创建主题时可以同时设置多个参数,具体的用法归纳如下 :

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --create --topic topic-create --partitions 4 --replication-factor 2 --config cleanup.policy=compact --config max.message.bytes=10000

在 kafka-topics.sh 脚本中还提供了一个if-not-exists 参数, 如果在创建主题时带上了这个参 数,那么在发生命名冲突时将不做任何处理(既不创建主题,也不报错)。如果没有发生命名冲突,那么和不带 if-not-exists 参数的行为一样正常创建主题。

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --create --topic topic-create --partitions 4 --replication-factor 2 --if-not-exists

通过 describe 指令类型来查看分区副本的分配细节,–topic还支持指定多个主题用逗号分隔,如果不使用–topic指定主题,则会展示出所有主题的详细信息,在使用 describe指令查看主题信息时还可以额外指定 topics-with-overrides、under-replicated-partitions和unavailable-partitions这三个参数来增加一些附加功能,增加 topics-with-overrides参数可以找出所有包含覆盖配置的主题,它只会列出包含了与集群不一样配置的主题。注意使用 topics-with-overrides参数时只显示原本只使用 describe指令的第一行信息,under-replicated-partitions和 navailable-partitions参数都可以找出有问题的分区。通过 under-replicated-partitions参数可以找出所有包含失效副本的分区。包含失效副本的分区可能正在进行同步操作,也有可能同步发生异常,此时分区的ISR集合小于AR集合。对于通过该参数査询到的分区要重点监控,因为这很可能意味着集群中的某个 broker已经失效或同步效率降低等。

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --describe --topic topic-create

通过list指令可以查看当前所有可用的主题

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --list

使用kafka-topics.sh脚本中的 alter指令修改分区个数、修改配置等。目前Kafka只支持增加分区数而不支持减少分区数,当主题中的消息包含key时(即key不为null),根据key计算分区的行为就会受到影响。如果所要修改的主题不存在,可以通过if-exists参数来忽略异常。

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-create --partations 3

除了修改分区数,我们还可以使用 kafka-topics.sh脚本的ater指令来变更主题的配置。在创建主题的时候我们可以通过 config参数来设置所要创建主题的相关参数,通过这个参数可以覆盖原本的默认配置。

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-create --config max.message.bytes=20000

正常情况下, 我们通过kafka-topics.sh脚本的under-replicated-partitions参数来显示主题中包含失效副本的分区时结果会返回空。比如我们来查看一下主题topic-partitions的相关信息:

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --describe --top topic-partitions --under-replicated-partitions

通过 delete-config参数来删除之前覆盖的配置,使其恢复原有的默认值。注意到在变更(增、删、改)配置的操作执行之后都会提示一段告警信息,指明了使用kafka-topics.sh脚本的 alter指令来变更主题配置的功能已经过时(deprecated),将在未来的版本中删除,并且推荐使用 kafka-configs.sh脚本来实现相关功能。

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --alter --topic topic-create --delete-config max.message.bytes --delete-config cleanup.policy

kafka-configs.sh脚本包含变更配置 alter和查看配置 describe这两种指令类型。同使用 kafka-topics.sh脚本变更配置的原则一样,增、删、改的行为都可以看作变更操作,不过 kafka-configs.sh脚本不仅可以支持操作主题相关的配置,还可以支持操作 broker、用户和客户端这3个类型的配置。kafka-configs.sh脚本使用 entity-type参数来指定操作配置的类型,并且使用 entity-name参数来指定操作配置的名称。–describe指定了查看配置的指令动作,–entity-type指定了查看配置的实体类型,–entity-name指定了查看配置的实体名称。 entity-type只可以配置4个值: topics、brokers、clients和 users,比如查看主题 topic-config的配置可以按如下方式执行:

配置管理kafka-configs.sh

bin/kafka-configs.sh --zookeeper localhost:2181/kafka --describe --entity-type topics --entity-name topic-config

使用alter指令变更配置时,需要配合add-config和 delete-config这两个参数起使用。add-config参数用来实现配置的增、改,即覆盖原有的配置; delete-config参数用来实现配置的删,即删除被覆盖的配置以恢复默认值。下面的示例演示了add-config参数的用法,覆盖了主题 topic-config的两个配置cleanup.policy和max.message.bytes(示例执行之前主题 topic-config无任何被覆盖的配置):

bin/kafka-configs.sh --zookeeper localhost:2181/kafka --alter--entity-type topics --entity-name topic-config --add-config max.message.bytes=20000,cleanup.policy=compact

kafka-topics.sh脚本中的 delete指令就可以用来删除主题。必须将 delete.topic.enable参数配置为true才能够删除主题,这个参数的默认值就是true,如果配置为 false,那么删除主题的操作将会被忽略。在实际生产环境中,建议将这个参数的值设置为true如果要删除的主题是Kafka的内部主题,那么删除时就会报错。

bin/kafka-topics.sh --zookeeper localhost:2181/kafka --delete --topic topic-create

分区的管理kafka-reassign-partitions.sh

消费组管理kafka-consumer-groups.sh

可以通过 list 这个指令类型 参数来罗列出当前集群中所有的消费组名称

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --list

kafka-consumer-groups.sh 脚本还可以配合 describe 这个指令类型的参数来展示某一个消费组的详细信息,不过要完成此功能还需要配合 group 参数来一 同实现, group 参数用来指定特定消费组的名称 下面的示例中展示了消费组 groupldMonitor 的详细信息

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group groupldMonitor 

消费组 共有 Dead、Empty、PreparingRebalance、CompletingRebalance、Stable 这几种状态,正常情况下, 一个具有消费者成员的消费组的状态为 Stable 我们可以通过 state 参数来查看消费组当前的状态,示例如下

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --descrbe --group groupidMonitor --state

我们还可以通过 members 参数罗列出消费组内的消费者成员信息,参考如下:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --descrbe --group groupidMonitor --members

如果在此基础上再增加一个 verbose 数,那么还会罗列出每个消费者成员的分配情况,如下所示

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --describe --group groupidMonitor --members --verbose

我们可 通过 delete 这个指 类型的参数来删除一个指定的消费组,不过如果消费组中有消费者成员正在运行,则删除操作会失败 ,详细参考如下:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --delete --group groupidMonitor

消费位移管理kafka-consumer-groups.sh

kafka-consumer-groups.sh 脚本还提供了重置消费组内消费位移的功能,具体是通过reset-offsets 这个指令类型的参数来实施的,不过实现这一功能的前提是消费组内没有正在运行的消费者成员。下面的示例将消费组中的所有分区的消费位移都置为 ,详细参考如下:

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group groupidMonitor --all-topics --reset-offsets --to-earliest --execute

可以通过将-all-topics 修改为–topic 来实现更加细粒度的消费位移的重置,–all-topics 参数指定了消费组中所有主题,而 topic 参数可指定主题甚至可以是主题中的若平分区 。下面的示 topic-monitor分区 2消费位移置为分区末尾

bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --group groupidMonitor --topic topic-monitor:2 --reset-offsets to-latest --execute

前面的两个示例中各自使用了to-earliest.和to-latest参数来分别将消费位移调整到分区的开头和末尾。除此之外, kafka-consumer-groups.sh脚本还提了更多的选择。

  • by-duration <String: duration>:将消费位移调整到距离当前时间指定间隔的最早位移处。duration的格式为“PnDTnHnMnS。
  • from-file <String: path to csv file>:将消费位移重置到CSV文件中定义的位置。
  • shift-by <Long: number-of-offsets>:把消费位移调整到当前位移+number-of-offsets处,number-of-offsets的值可以为负数。
  • to-current :将消费位移调整到当前位置处。
  • to-datetime<String: datatime>:将消费位移调整到大于给定时间的最早位移处。datatime的格式为“YYYY-MM-DDTHH:mm:SS.sss”。
  • to-offset:将消费位移调整到指定的位置。

kafka-consumer-groups.sh 脚本巾还有两个参数 dry-run和export, dry-run 是只打印具体的调整方案而不执行,export是将位移调整方案以 csv 的格式输出到控制台,而execute 才会执行真正的消费位置重置。

手动删除消息kafka-delete-records.sh

下面使 kafka-delete-records.sh脚本来删除部分消息 在执行具体的删除动作之前需要先配置一个JSON 文件,用来指定所要删除消息的分区及对应的位置,我们分别需要删除主题topic-monitor 分区0中偏移10 、 分区1中偏移11和分区2中偏移12的消息:

{
    "partitions":[
        {
            "topic":"topic-monitor",
            "partition":0,
            "offset":10
        },
        {
            "topic":"topic-monitor",
            "partition":1,
            "offset":11
        },
        {
            "topic":"topic-monitor",
            "partition":2,
            "offset":12
        }
    ],
    "version":1
}

之后将这段内容保存文件中,比如 取名为 delete.json ,在此之后,我们就可以通过kafka-delete-records.sh 本中的 offset-json-file 参数来指定这个 JSON 文件,具体的删除操作如下。

bin/kafka-delete-records.sh --bootstrap-server localhost:9092 --offset-json-file delete.json

消费消息kafka-console-consumer.sh

通过 kafka-console-consumer.sh脚本来订阅 topic-demo ,示例如下:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic topic-demo

kafka-console-consumer.sh脚本来查看 __consumer_offsets中的内容,不过要设定 formatter参数为kafka.coordinator.group.GroupMetadataManager$OffsetsMessageFormatter。

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic  __consumer_offsets --partition 20 --formatter 'kafka.coordinator.group.GroupMetadataManager$OffsetsMessageFormatter'

生产消息kafka-console-producer.sh

使用 kafka-console-producer. sh 本发送 条消息“Hello Kafka !”至主题 topic-demo ,示例如下:

bin/kafka-console=producer.sh --broker-list localhost:9092 topic --topic topic-demo

查看日志内容kafka-dump-log.sh

bin/kafka-dump-log.sh --files /tmp/kafka-logs/msg_format_v2-000000000000000000000.log --print-data-log

关闭 Kafka 服务kafka-server-stop.sh

bin/kafka-server-stop.sh

启动 Kafka 服务kafka-server-start.sh

bin/kafka-server-start.sh -daemo config/server.properties 
#或者
bin/kafka-server-start.sh config/server.properties &

优先副本的选举kafka-preferred-replica-election.sh

Kafka kafka-perferred-replica-election.sh 脚本提供了对分区 leader 副本进行重新平衡的功能。优先副本的选举过程是个安全的过程, Kafka 客户端可以自动感知分区 leader 副本的变更。下面的示例演示了 kafka-preferred-replica-election.sh脚本的具体用法:

bin/kafka-preferred-replica-election.sh --zookeeper localhost:2181/kafka

kafka-preferred-replica-election.sh脚本中还提供了 path-to-json-file 参数来小批量地对部分分区执行优先副本的选举操作 通过 path-to-json-file 参数来指定一个 JSON 件,这个 JSON 文件里保存需要执行优先副本选举的分区清单。对主题 topic-partitions 执行优先副本的选举操作,那么先创建一个 JSON 文件,文件名假定为 election.json, 文件的内容如下:

{
    "partitions":[
        {
            "topic":"topic-monitor",
            "partition":0
        },
        {
            "topic":"topic-monitor",
            "partition":1
        },
        {
            "topic":"topic-monitor",
            "partition":2
        }
    ]
}

然后通过 kafka-perferred-replica-election.sh 脚本配合 path-to-json-file 参数来对主题topic-partitions 执行优先副本的选举操作,具体示例如下:

bin/kafka-preferred-replica-election.sh --zookeeper localhost:2181/kafka --path-to-json -file election.json
  • 0
    点赞
  • 0
    评论
  • 0
    收藏
  • 打赏
    打赏
  • 扫一扫,分享海报

参与评论 您还未登录,请先 登录 后发表或查看评论
©️2022 CSDN 皮肤主题:Age of Ai 设计师:meimeiellie 返回首页

打赏作者

一直不懂

你的鼓励将是我创作的最大动力

¥2 ¥4 ¥6 ¥10 ¥20
输入1-500的整数
余额支付 (余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值