全面Kafka监控方案:从配置到指标
文章目录
- 1.1.监控配置
- 1.2.监控工具
- 1.3.性能指标
- 系统相关指标
- GC相关指标
- JVM相关指标
- Topic相关指标
- Broker相关指标
- 1.4.性能指标说明
- 1.5.重要指标说明
1.1.监控配置
开启JMX服务端口:kafka基本分为broker、producer、consumer三个子项,每一项的启动都需要用到 $KAFKA_HOME/bin/kafka-run-class.sh 脚本,在该脚本中,存在以下语句:
if ...
KAFKA_JMX_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false"fi
if ...KAFKA_JMX_OPTS="$KAFKA_JMX_OPTS -Dcom.sun.management.jmxremote.port=$JMX_PORT "
Fi
在启动kafka的过程中,只要指定 JMX_PORT 的值,即可对broker、producer、consumer进行监控。目前有两种方法,在$KAFKA_HOME/bin/kafka-server-start.sh $KAFKA_HOME/bin/kafka-console-consumer.sh $KAFKA_HOME/bin/kafka-console producer.sh三个脚本中分别添加 $JMX_PORT=XXXX 语句,但是只适用于使用console方式对topic进行使用的情况。
修改$KAFKA_HOME/bin/kafka-run-class.sh 脚本中的上述语句,使其端口随机变化,可以通过 ps -ef |grep kafka 命令来获取随机的端口号,来进行监控。
1.2.监控工具
Prometheus监控Kafka
- 如可以采用docker部署
kafka-exporter:
docker run -ti -d --rm -p 9308:9308 danielqsj/kafka-exporter --kafka.server=192.168.0.4:9092
| 监控项名称 | 阈值说明 | 使用的公式 |
|---|---|---|
| Kafka的Brokers在线 | 1m !=1严重 | count(kafka_server_replicamanager_leadercount{job=~"$job"}) |
| Kafka集群中副本处于同步失败或失效状态的分区数 | >0严重 | sum(kafka_topic_partition_under_replicated_partition{topic=~"$topic", namespace=~"$kubernetes_namespace"}) |
| Kafka集群中控制器的数量 | !=1严重 | sum(kafka_controller_kafkacontroller_activecontrollercount{job=~"$job"}) |
| Kafka离线分区数 | >0严重 | sum(kafka_controller_kafkacontroller_offlinepartitionscount{job=~"$job"}) |
| Kafka每秒入网络流量 | >=150中度 | avg_over_time(kafka_server_BrokerTopicMetrics_OneMinuteRate{name="BytesInPerSec",topic=""}[1m]) / 1024 /1024 |
| Kafka请求处理程序线程空闲的平均时间百分比 | <= 0.3中度 | avg_over_time(kafka_server_KafkaRequestHandlerPool_OneMinuteRate{name="RequestHandlerAvgIdlePercent",}[1m]) |

2. 在prometheus.yml出添加kafka配置
- job_name: 'kafka_exporter'static_configs:- targets: ['$node1:9308']
- 重启prometheus加载。
- 在promethues的管理界面可以查看状态:

- 然后配置grafana来展示图表效果。
- 告警监控项,如下表供参考:
| 时间百分比 | rcent",}[1m]) | |
|---|---|---|
| Kafka请求处理程序线程空闲的平均时间百分比 | <= 0.3中度 | avg_over_time(kafka_server _KafkaRequestHandlerPool _OneMinuteRate{name=“ RequestHandlerAvgIdlePercent”,}[1m]) |
| Kafka网络处理器线程空闲的平均时间百分比 | <= 0.3中度 | avg_over_time(kafka_network_ SocketServer_Value{name=“ NetworkProcessorAvgIdlePercent”,}[1m]) |
| Kafka已建立的连接数 | > 3000中度> 5000严重 | sum(avg_over_time(kafka_ server_socket_server_metrics_ connection_count{listener=“PLAINTEXT”,} [1m])) by (instance,app) |
| Kafka每秒新建连接数 | > 100中度> 200 严重 | sum(avg_over_time(kafka_server _socket_server_metrics_connection _creation_rate[1m])) by (instance) |
| Kafka请求在请求队列中等待的时间 | >5000中度 | avg_over_time(kafka_networ k_RequestMetrics_999thPercentile {name=“RequestQueueTimeMs”, request=“Produce”,}[1m]) |
| Kafka_leader处理请求的时间 | >5000中度 | avg_over_time(kafka_network_ RequestMetrics_999thPercentile {name=“LocalTimeMs”,request=“Produce”,}[1m]) |
| Kafka请求等待follower的时间 | >1000中度 | avg_over_time(kafka_network_ RequestMetrics_999thPercentile {name=“RemoteTimeMs”,request=“Produce”,}[1m]) |
| Kafka请求在响应队列中等待的时间 | >1000中度 | avg_over_time(kafka_network_ RequestMetrics_999thPercentile {name=“ResponseQueueTimeMs”,request=“Produce”,}[1m]) |
| Kafka发送响应的时间 | >1000中度 | avg_over_time(kafka_network_RequestMetrics _999thPercentile{name=“ResponseSendTimeMs”, request=“Produce”,}[1m]) |
| Kafka汇总传入消息速率 | > 200000中度 | avg_over_time(kafka_server_ BrokerTopicMetrics_OneMinuteRate {name=“MessagesInPerSec”,topic=“”}[1m]) |
| kafka消费滞后告警 | >1000 | sum(kafka_consumergroup _lag{topic!=“sop_free_study_fix-student_wechat_detail”}) by (consumergroup, topic) > 1000 |
| kafka-exporter停止 | < 1 | kafka_exporter_build_info |
| kafka server停止 | <1 | kafka_brokers |
| kafka监控topic实时生产速率 | >= 0 | sum(irate(kafka_topic_partition_current_ offset{topic !~ "__consumer_offsets |
| Kafka消费者端分区偏移量 | 5m >= 0 | sum(delta(kafka_consumergroup_current _offset[5m])/5) by (consumergroup, topic) |
| Kafka消费者组的当前主题分区偏移汇总 | sum(delta(kafka_consumergroup_current _offset_sum[5m])/5) by (consumergroup, topic) | |
| Kafka某个消费组消费延迟 | 5m >100000中度 | sum(kafka_consumergroup_lag) by (consumergroup,partition,topic) |
| Kafka某个消费者组在某个主题分区的近似滞后情况汇总 | sum(kafka_consumergroup_lag_sum) by (consumergroup,partition,topic) | |
| 某个消费组成员 | kafka_consumergroup_ members{instance=“$instance”} | |
| Kafka分区的位移量汇总 | sum(kafka_topic_partition_current_offset) by (partition,topic) | |
| Kafka分区的同步副本数 | 1m =0 中度 | sum(kafka_topic_partition_in_sync_replica) |
| Kafka旧主题分区偏移 | sum(kafka_topic_partition_oldest _offset{topic=~“$topic”}) by (partition,topic) | |
| Kafka主题分区的副本数 | 1m <3中度 | sum(kafka_topic_partition _replicas{topic=~“$topic”}) |
| Kafka主题分区复制不足的分区数 | sum(kafka_topic_partition_under _replicated_partition{topic=~“$topic”}) | |
| Kafka 总分区数 | 5m >1000中度 | sum(kafka_topic_partitions) by(topic) |
1.3.性能指标
系统相关指标
- 系统信息收集 java.lang:type=OperatingSystem
- Thread信息收集 java.lang:type=Threading
- 获取mmaped和direct空间
- 通过BufferPoolMXBean获取used、capacity、count
GC相关指标
- Young GC
java.lang:type=GarbageCollector,name=G1 Young Generation - Old GC
java.lang:type=GarbageCollector,name=G1 Old Generation
JVM相关指标
通过MemoryMXBean获取JVM相关信息HeapMemoryUsage和NonHeapMemoryUsage;通过MemoryPoolMXBean获取其他JVM内存空间指标,例如:Metaspace、Codespace等
Topic相关指标
- Topic消息入站速率(Byte)
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec,topic=" + topic - Topic消息出站速率(Byte)
kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec,topic=" + topic - Topic请求被拒速率
kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec,topic=" + topic - Topic失败拉去请求速率
kafka.server:type=BrokerTopicMetrics,name=FailedFetchRequestsPerSec,topic=" + topic; - Topic发送请求失败速率
kafka.server:type=BrokerTopicMetrics,name=FailedProduceRequestsPerSec,topic=" + topic - Topic消息入站速率(message)
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec,topic=" + topic
Broker相关指标
- Log flush rate and time
kafka.log:type=LogFlushStats,name=LogFlushRateAndTimeMs - 同步失效的副本数
kafka.server:type=ReplicaManager,name=UnderReplicatedPartitions - 消息入站速率(消息数)
kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec - 消息入站速率(Byte)
kafka.server:type=BrokerTopicMetrics,name=BytesInPerSec - 消息出站速率(Byte)
kafka.server:type=BrokerTopicMetrics,name=BytesOutPerSec - 请求被拒速率
kafka.server:type=BrokerTopicMetrics,name=BytesRejectedPerSec - 失败拉去请求速率
kafka.server:type=BrokerTopicMetrics,name=FailedFetchRequestsPerSec - 发送请求失败速率
kafka.server:type=BrokerTopicMetrics,name=FailedProduceRequestsPerSec - Leader副本数
kafka.server:type=ReplicaManager,name=LeaderCount - Partition数量
kafka.server:type=ReplicaManager,name=PartitionCount - 下线Partition数量
kafka.controller:type=KafkaController,name=OfflinePartitionsCount - Broker网络处理线程空闲率
kafka.server:type=KafkaRequestHandlerPool,name=RequestHandlerAvgIdlePercent - Leader选举比率
kafka.controller:type=ControllerStats,name=LeaderElectionRateAndTimeMs - Unclean Leader选举比率
kafka.controller:type=ControllerStats,name=UncleanLeaderElectionsPerSec - Controller存活数量
kafka.controller:type=KafkaController,name=ActiveControllerCount - 请求速率
kafka.network:type=RequestMetrics,name=RequestsPerSec,request=Produce - Consumer拉取速率
kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchConsumer - Follower拉去速率
kafka.network:type=RequestMetrics,name=RequestsPerSec,request=FetchFollower - Request total time
kafka.network:type=RequestMetrics,name=TotalTimeMs,request=Produce - Consumer fetch total time
kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchConsumer - Follower fetch total time
kafka.network:type=RequestMetrics,name=TotalTimeMs,request=FetchFollower - Time the follower fetch request waits in the request queue
kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=FetchFollower - Time the Consumer fetch request waits in the request queue
kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=FetchConsumer - Time the Produce fetch request waits in the request queue
kafka.network:type=RequestMetrics,name=RequestQueueTimeMs,request=Produce - Broker I/O工作处理线程空闲率
kafka.network:type=SocketServer,name=NetworkProcessorAvgIdlePercent - ISR变化速率
kafka.server:type=ReplicaManager,name=IsrShrinksPerSec
1.4.性能指标说明
| 指标 | 单位 | 具体含义 |
|---|---|---|
| kafka.broker_offset offsets | broker | 上当前消息的偏移量(offset) |
| kafka.consumer.bytes_in | bytes/second | consumer 字节率(bytes in rate) |
| kafka.consumer.delayed_requests | requests | 延迟的 consumer 请求数 |
| kafka.consumer.expires_per_second | evictions/second | 延迟 consumer 的请求到期(expiration)速率 |
| kafka.consumer.fetch_rate | requests | consumer 向 broker 发送提取请求(fetch requests)的最低速率 |
| kafka.consumer.kafka_commits | writes/second | 面向 Kafka 的 offset commits 速率 |
| kafka.consumer.max_lag | offsets | 最大消费滞后(consumer lag) |
| kafka.consumer.messages_in | messages/second | consumer 消息消费(consumption)的速率 |
| kafka.consumer.zookeeper_commits | writes/second | 面向 ZooKeeper 的 offset commits 速率 |
| kafka.consumer_lag | offsets | consumer 和 broker 之间的消息滞后(lag) |
| kafka.consumer_offset | offsets | consumer 的当前消息偏移量(current message offset) |
| kafka.expires_sec | evictions/second | 延迟生产者(delayed producer)的请求到期(request expiration)速率 |
| kafka.follower.expires_per_second | evictions/second | 关注者(followers)的请求到期(request expiration)速率 |
| kafka.log.flush_rate | flushes/second | 日志刷新速率 |
| kafka.messages_in | messages | 传入(incoming)信息速率 |
| kafka.net.bytes_in | bytes/second | 传入(incoming)字节速率 |
| kafka.net.bytes_out | bytes/second | 传出(outgoing)字节速率 |
| kafka.net.bytes_rejected | bytes/second | 被拒绝(rejected)的字节速率 |
| kafka.producer.bytes_out | bytes/second | producer 字节输出速率 |
| kafka.producer.delayed_requests | requests | 延迟的 producer 请求数 |
| kafka.producer.expires_per_seconds | evictions/second | producer 请求到期率 |
| kafka.producer.io_wait | nanoseconds | Producer I/O 等待时间 |
| kafka.producer.message_rate | messages/second | Producer 消息速率 |
| kafka.producer.request_latency_avg | milliseconds | Producer 平均请求延迟 |
| kafka.producer.request_rate | requests/second | producer 每秒钟的请求数 |
| kafka.producer.response_rate | responses/second | producer 每秒钟的响应数 |
| kafka.replication.isr_expands | nodes/second | 副本加入 ISR 池的速率 |
| kafka.replication.isr_shrinks | nodes/second | 副本离开 ISR 池的速率 |
| kafka.replication.leader_elections | events/second | 领导选举(Leader election)频率 |
| kafka.replication.unclean_leader_elections | events/second | Unclean 的领导选举(Leader election)频率 |
| kafka.replication.under_replicated_partitions | 未使用的分区数 | |
| kafka.request.fetch.failed | requests | 客户端获取请求(fetch request)失败次数 |
| kafka.request.fetch.failed_per_second | requests/second | 每秒钟的客户端获取请求(fetch request)失败率 |
| kafka.request.fetch.time.99percentile | requests/second | 获取请求(fetch request)时间的第 99 百分位的值 |
| kafka.request.fetch.time.avg | requests/second | 获取请求(fetch request)时间的平均值 |
| kafka.request.handler.avg.idle.pct | fractions | 请求处理程序线程(request handler threads)的平均空闲时间占比 |
| kafka.request.metadata.time.99percentile | milliseconds | 元数据(metadata)请求时间的第 99 百分位的值 |
| kafka.request.metadata.time.avg | milliseconds | 元数据(metadata)请求时间的的平均值 |
| kafka.request.offsets.time.99percentile | milliseconds | offset 请求时间的第 99 百分位的值 |
| kafka.request.offsets.time.avg | milliseconds | offset 请求时间的平均值 |
| kafka.request.produce.failed | requests | 失败的产品请求(produce requests)数 |
| kafka.request.produce.failed_per_second | requests/second | 每秒钟的产品请求(produce requests)失败率 |
| kafka.request.produce.time.99percentile | requests/second | 产品请求(produce requests)时间的第 99 百分位的值 |
| kafka.request.produce.time.avg | requests/second | 产品请求(produce requests)平均时间 |
| kafka.request.update_metadata.time.99percentile | milliseconds | 更新元数据请求(update metadata requests)时间的第 99 百分位的值 |
| kafka.request.update_metadata.time.avg | milliseconds | 更新元数据请求(update metadata requests)时间的平均值 |
1.5.重要指标说明
参照kafka-manager管理工具
1.
kafka.replication.under_replicated_partitions:
Under Replicated Partitions
: 在一个运行健康的集群中,处于同步状态的副本数(ISR)应该与总副本数(简称AR:Assigned Repllicas)完全相等,如果分区的副本远远落后于leader,那这个follower将被ISR池删除,随之而来的是IsrShrinksPerSec(可理解为isr的缩水情况,后面会讲)的增加。由于kafka的高可用性必须通过副本来满足,所有有必要重点关注这个指标,让它长期处于大于0的状态。
2. Brokers Spread:
broker使用率,如kafka集群9个broker,某topic有7个partition,则broker spread: 7 / 9 = 77%
3. Brokers Leader Skew:
leader partition是否存在倾斜,如kafka集群9个broker,某topic14个partition,则正常每个broker有2个leader partition。若其中一个broker有0个leader partition,一个有4个leader partition,则broker leader skew: (4 - 2) / 14 = 14%
由于kafka所有读写都在leader上进行, broker leader skew会导致不同broker的读写负载不均衡,配置参数 auto.leader.rebalance.enable=true 可以使kafka每5min自动做一次leader的rebalance,消除这个问题。
4. Lag:
表示consumer的消费能力,计算公式为Lag = LogSize - Consumer Offset,Kafka Manager从zk获取LogSize,从kafka __consumer_offsets topic读取Offset。两步操作存在一个时间gap,因此吞吐很大的topic上会出现LogSize > Offset 的情况。导致Lag负数。
相关文章:
全面Kafka监控方案:从配置到指标
文章目录 1.1.监控配置1.2.监控工具1.3.性能指标系统相关指标GC相关指标JVM相关指标Topic相关指标Broker相关指标 1.4.性能指标说明1.5.重要指标说明 1.1.监控配置 开启JMX服务端口:kafka基本分为broker、producer、consumer三个子项,每一项的启动都需要…...
kipotix4靶机实战
信息收集 1.判断靶机ip 原理:开靶机之前nmap扫一次网段,再开靶机之后扫一次,查看多出来的ip就是靶机ip ip192.168.98.1742.判断端口服务,系统版本 a.确定端口 b.-p指定端口进一步收集 c.信息筛选 1.端口:22,80,139,…...
我的秋招总结
我的秋招总结 个人背景 双非本,985硕,科班 准备情况 以求职为目的学习Java的时间大概一年。 八股,一开始主要是看B站黑马的八股文课程,背JavaGuide和小林coding还有面试鸭。 算法,250,刷了3遍左右 项目&…...
广义线性模型(GLM)全面解析
引言 广义线性模型(Generalized Linear Model, GLM)是统计学中一种重要的建模工具,它扩展了传统线性回归模型,能够处理响应变量的非正态分布和非线性关系。GLM 的灵活性和广泛的应用范围使其在金融、医学、社会科学等领域中成为数…...
C++ OCR 文字识别
一.引言 文字识别,也称为光学字符识别(Optical Character Recognition, OCR),是一种将不同形式的文档(如扫描的纸质文档、PDF文件或数字相机拍摄的图片)中的文字转换成可编辑和可搜索的数据的技术。随着技…...
PHP实现登录和注册(附源码)
前言 本博客主要讲述利用php环境实现一个简单的前后端结合的用户登录和注册功能。phpstudy是PHP调试环境的集成包,该程序包集成了 ApachePHPMySQLphpMyAdmin 等多个工具,是很好用的调试环境的程序集成包。 目录 前言 1. 准备工作 1.1 工具 1.2 php…...
AEO海关认证的注意事项
AEO海关认证的注意事项繁多且至关重要,企业需细致准备,确保万无一失。 首先,企业需深入研读相关政策文件,如《中华人民共和国海关注册登记和备案企业信用管理办法》及《海关高级认证企业标准》,以政策为指引࿰…...
ElasticSearch 分布式部署
一、引言 在当今大数据时代,数据呈爆炸式增长,如何高效地存储、检索数据成为了众多企业面临的关键挑战。ElasticSearch 作为一款强大的分布式搜索引擎,凭借其卓越的性能、灵活的扩展性以及强大的全文检索能力,在日志分析、数据分…...
Vue中动态样式绑定+CSS变量实现切换明暗主题功能——从入门到进阶
1.直接借助Vue的动态绑定样式绑定 Vue动态样式绑定 在Vue中,动态样式绑定是一种强大的功能,它允许开发者根据数据的变化动态地更新元素的样式。以下是对Vue动态样式绑定的详细知识梳理与详解: 一、基础知识 Vue的动态样式绑定主要通过v-b…...
vue3 video 播放rtmp视频?(360浏览器支持)
** 注意:目前只能在360浏览器播放rtmp视频** 谷歌浏览器不支持Flash Player的问题 试过上面这个方法,目前没能实现(没解决),如果有更好的解决方法,告诉我一下 需要下载版本较低的video.js版本库࿰…...
RK356x bsp 7 - PCF8563 RTC调试记录
文章目录 1、环境介绍2、目标3、PCF85634、dts配置5、内核配置6、测试验证 1、环境介绍 硬件:飞凌ok3568-c开发板 软件:原厂rk356x sdk 2、目标 开发板断电后仍正常计时。 3、PCF8563 PCF8563 是由 NXP Semiconductors 公司生产的低功耗 CMOS 实时…...
定义Shape:打造属于你的独特图形
自定义Shape:打造属于你的独特图形 在Android开发中,自定义图形绘制是一个非常重要的技能,尤其是在需要实现复杂UI或特定设计需求时。Android提供了android.graphics.drawable.shapes包,其中包含了一些基本的形状类,如RectShape、OvalShape等。然而,有时这些基本形状无法…...
JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介
1. 基本概念 1.1、前言 web开发: web,网页的意思,www.baidu.com静态 web html,css提供给所有人看的数据始终不会发生变化! 动态 web 淘宝,几乎是所有的网站;提供给所有人看的数据始终会发生变化…...
python学opencv|读取图像(二十一)使用cv2.circle()绘制圆形进阶
【1】引言 前序已经掌握了使用cv2.circle()绘制圆形的基本操作,相关链接为: python学opencv|读取图像(二十)使用cv2.circle()绘制圆形-CSDN博客 由于圆形本身绘制起来比较简单,因此可以自由操作的空间也就大&#x…...
CLIP:连接文本与图像, 从自然语言监督中学习可迁移的视觉模型
CLIP:连接文本与图像, 从自然语言监督中学习可迁移的视觉模型 flyfish Learning Transferable Visual Models From Natural Language Supervision https://github.com/OpenAI/CLIP 摘要 CLIP Contrastive Language-Image Pre-Training Contrastive&…...
Linux 硬盘扩容 分区 挂载
Linux 硬盘扩容 分区 & 挂载 1. 添加分区 1.1. 查看新添加的硬盘 fdisk -l假设当前未挂载的盘符是/dev/sdb,后文中所有操作都按挂载/dev/sdb 操作 1.2. 分区管理 小硬盘 fdisk /dev/sdb大硬盘(2TB以上) gdisk /dev/sdb1.3. 编辑分…...
基于 Slf4j 和 AOP 的自动化方法执行时间日志记录方案
前言 其实这个需求很简单,但是这个需求又是项目中必不可少的,尤其对于性能调优这块,但是使用哪种方式更加方便呢,这就是本篇博文需要讨论的重点 系统时间 可以通过 System.currentTimeMillis() 或 System.nanoTime() 来实现。 …...
关于 K8s 的一些基础概念整理-补充【k8s系列之二】
〇、前言 本文继续整理下 K8s 的一些基础概念,作为前一篇概念汇总的补充。 前一篇博文链接:关于 K8s 的一些基础概念整理【k8s系列之一】_集群 master节点 控制节点 宿主机-CSDN博客 一、详情 1.1 Label Label 在 k8s 中是一个非常核心的概念…...
FPGA的DMA应用——pcileech
硬件通过pcie总线,访存本机的内存,并进行修改,可以进行很多操作。 学习视频:乱讲DMA及TLP 1-pcileech项目简介和自定义模块介绍_哔哩哔哩_bilibili vivado2024.1的下载文章链接和地址:AMD-Xilinx Vivado™ 2024.1 现…...
信息安全管理:运行管理checklist
运行管理checklist内容包括日常操作与维护管理、变更管理、备份与故障恢复、应急与业务连续性管理等内容。 一、日常操作与维护管理 ▼▼制度与流程 是否建立日常运行操作制度与流程?包括网络、主机、应用等方面的操作制度与流程? 是否明确相关部门和人…...
国防科技大学计算机基础课程笔记02信息编码
1.机内码和国标码 国标码就是我们非常熟悉的这个GB2312,但是因为都是16进制,因此这个了16进制的数据既可以翻译成为这个机器码,也可以翻译成为这个国标码,所以这个时候很容易会出现这个歧义的情况; 因此,我们的这个国…...
在HarmonyOS ArkTS ArkUI-X 5.0及以上版本中,手势开发全攻略:
在 HarmonyOS 应用开发中,手势交互是连接用户与设备的核心纽带。ArkTS 框架提供了丰富的手势处理能力,既支持点击、长按、拖拽等基础单一手势的精细控制,也能通过多种绑定策略解决父子组件的手势竞争问题。本文将结合官方开发文档,…...
ffmpeg(四):滤镜命令
FFmpeg 的滤镜命令是用于音视频处理中的强大工具,可以完成剪裁、缩放、加水印、调色、合成、旋转、模糊、叠加字幕等复杂的操作。其核心语法格式一般如下: ffmpeg -i input.mp4 -vf "滤镜参数" output.mp4或者带音频滤镜: ffmpeg…...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
python爬虫——气象数据爬取
一、导入库与全局配置 python 运行 import json import datetime import time import requests from sqlalchemy import create_engine import csv import pandas as pd作用: 引入数据解析、网络请求、时间处理、数据库操作等所需库。requests:发送 …...
libfmt: 现代C++的格式化工具库介绍与酷炫功能
libfmt: 现代C的格式化工具库介绍与酷炫功能 libfmt 是一个开源的C格式化库,提供了高效、安全的文本格式化功能,是C20中引入的std::format的基础实现。它比传统的printf和iostream更安全、更灵活、性能更好。 基本介绍 主要特点 类型安全:…...
xmind转换为markdown
文章目录 解锁思维导图新姿势:将XMind转为结构化Markdown 一、认识Xmind结构二、核心转换流程详解1.解压XMind文件(ZIP处理)2.解析JSON数据结构3:递归转换树形结构4:Markdown层级生成逻辑 三、完整代码 解锁思维导图新…...
Android写一个捕获全局异常的工具类
项目开发和实际运行过程中难免会遇到异常发生,系统提供了一个可以捕获全局异常的工具Uncaughtexceptionhandler,它是Thread的子类(就是package java.lang;里线程的Thread)。本文将利用它将设备信息、报错信息以及错误的发生时间都…...
Qt的学习(一)
1.什么是Qt Qt特指用来进行桌面应用开发(电脑上写的程序)涉及到的一套技术Qt无法开发网页前端,也不能开发移动应用。 客户端开发的重要任务:编写和用户交互的界面。一般来说和用户交互的界面,有两种典型风格&…...
