【Elasticsearch】监控与管理:集群监控指标

news2025/2/12 5:06:21

🧑 博主简介:CSDN博客专家历代文学网(PC端可以访问:https://literature.sinhy.com/#/?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,精通Java编程高并发设计Springboot和微服务,熟悉LinuxESXI虚拟化以及云原生Docker和K8s,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
技术合作请加本人wx(注明来自csdn):foreast_sea

在这里插入图片描述


在这里插入图片描述

文章目录

  • 【Elasticsearch】监控与管理:集群监控指标
    • 引言
    • 1. Elasticsearch 集群监控概述
      • 1.1 什么是 Elasticsearch 集群监控?
      • 1.2 监控的重要性
      • 1.3 Elasticsearch 内置监控工具
    • 2. 节点状态指标
      • 2.1 CPU 使用率
      • 2.2 内存使用率
      • 2.3 磁盘空间
      • 2.4 JVM 堆内存
      • 2.5 网络使用情况
    • 3. 索引指标
      • 3.1 文档数量
      • 3.2 索引大小
      • 3.3 索引操作统计
      • 3.4 索引碎片化程度
    • 4. 搜索性能指标
      • 4.1 查询延迟
    • 4.2 查询吞吐量
      • 4.3 聚合操作性能
      • 4.4 响应时间分布
    • 5. 通过 Java API 获取监控指标
      • 5.1 使用 REST API 获取节点状态
      • 5.2 使用 Java High Level REST Client 获取索引统计信息
      • 5.3 实时监控搜索性能
    • 6. 可视化工具:Kibana 的应用
      • 6.1 Kibana 的安装与配置
      • 6.2 创建监控仪表盘
      • 6.3 实时监控与告警设置
    • 7. 总结与展望
    • 8. 参考资料

【Elasticsearch】监控与管理:集群监控指标

引言

在现代互联网应用中,Elasticsearch 已经成为不可或缺的核心组件之一。无论是搜索引擎、日志分析系统,还是实时数据分析平台,Elasticsearch 凭借其强大的分布式特性、灵活的查询能力以及高效的全文检索功能,在各个领域中都有着广泛的应用。然而,随着业务规模的不断扩大和数据量的持续增长,Elasticsearch 集群的稳定性、性能和资源利用率成为了运维人员和开发人员关注的重点。

在实际生产环境中,Elasticsearch 集群可能会面临多种挑战:节点负载不均导致某些节点成为性能瓶颈、磁盘空间不足引发节点不可用、索引碎片化严重导致查询性能下降等等。这些问题如果得不到及时发现和处理,将会直接影响系统的可用性和用户体验。因此,对 Elasticsearch 集群进行实时监控和深入分析,成为了保障系统稳定运行的关键环节。

Elasticsearch 本身提供了丰富的内置监控指标和工具,可以帮助我们全面了解集群的运行状态。这些指标涵盖了节点级别的资源使用情况(如 CPU 使用率、内存使用率、磁盘空间等)、索引级别的数据分布和操作统计(如文档数量、索引大小、查询请求量等),以及搜索性能相关的指标(如查询延迟、查询吞吐量等)。通过这些指标,我们可以快速定位集群中的潜在问题,并采取相应的优化措施。

对于 Java 开发者来说,掌握如何通过 Elasticsearch 的 Java API 获取和分析这些监控指标尤为重要。无论是通过编写自定义监控脚本,还是集成第三方监控工具(如 Kibana、Prometheus 等),了解如何高效地获取和解析这些指标数据,都是提升系统运维能力的关键技能。

本文将从 Elasticsearch 集群监控的基本原理出发,详细介绍各类监控指标的作用和应用场景,并结合实际案例展示如何通过 Java API 和可视化工具(如 Kibana)获取和分析这些指标。希望通过本文的讲解,能够帮助读者全面掌握 Elasticsearch 集群监控的核心技术和实践方法。


1. Elasticsearch 集群监控概述

1.1 什么是 Elasticsearch 集群监控?

Elasticsearch 集群监控是指通过对 Elasticsearch 集群的各项运行指标进行实时采集、分析和展示,从而全面了解集群的健康状况、性能表现以及资源使用情况的过程。监控的目标是及时发现潜在问题,并采取相应的优化措施,以保障集群的稳定性和高效性。

1.2 监控的重要性

  • 保障系统稳定性:通过监控可以及时发现节点故障、资源不足等问题,避免因单点故障导致整个集群不可用。
  • 优化性能:通过对 CPU、内存、磁盘等资源的使用情况进行分析,可以识别性能瓶颈并进行针对性优化。
  • 资源规划:基于历史数据和趋势分析,可以更好地规划硬件资源的扩展,避免资源浪费或不足。
  • 故障排查:当系统出现异常时,监控数据可以为故障排查提供有力的支持。

1.3 Elasticsearch 内置监控工具

Elasticsearch 提供了多种内置工具和接口用于集群监控:

  • Nodes API:用于获取节点级别的各项指标。
  • Cluster Health API:用于查看集群的整体健康状况。
  • Indices Stats API:用于获取索引级别的统计信息。
  • Search Profiler:用于分析搜索请求的执行过程和性能瓶颈。

此外,Elasticsearch 还支持与第三方工具(如 Kibana、Prometheus、Grafana 等)集成,以实现更强大的可视化监控和告警功能。


2. 节点状态指标

2.1 CPU 使用率

CPU 使用率反映了节点的计算资源使用情况。如果某个节点的 CPU 使用率长期处于高位(如超过 80%),可能会导致节点响应变慢甚至不可用。

// 示例:通过 Java API 获取节点 CPU 使用率
public void getNodeCpuUsage() {
    NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();
    for (NodeInfo node : response.getNodes()) {
        System.out.println("Node name: " + node.getName());
        System.out.println("CPU usage: " + node.getJvm().getCpuLoad());
    }
}

2.2 内存使用率

内存使用率是衡量节点内存资源使用情况的重要指标。如果内存使用率过高,可能会导致垃圾回收(GC)频繁发生,进而影响系统性能。

// 示例:获取节点内存使用情况
public void getNodeMemoryUsage() {
    NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();
    for (NodeInfo node : response.getNodes()) {
        System.out.println("Node name: " + node.getName());
        System.out.println("Heap used: " + node.getJvm().getMem().getHeapUsed());
        System.out.println("Heap max: " + node.getJvm().getMem().getHeapMax());
    }
}

2.3 磁盘空间

磁盘空间不足是导致节点不可用的常见原因之一。通过监控磁盘空间使用情况,可以及时发现并处理磁盘满的问题。

// 示例:获取节点磁盘空间信息
public void getNodeDiskSpace() {
    NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();
    for (NodeInfo node : response.getNodes()) {
        System.out.println("Node name: " + node.getName());
        for (NodeInfo.NodeInfoFs fs : node.getFs()) {
            System.out.println("Path: " + fs.getPath());
            System.out.println("Total space: " + fs.getTotal());
            System.out.println("Free space: " + fs.getFree());
        }
    }
}

2.4 JVM 堆内存

JVM 堆内存的使用情况直接影响着节点的性能。如果堆内存不足,可能会导致频繁的 Full GC,从而影响系统响应速度。

// 示例:获取 JVM 堆内存使用情况
public void getJvmHeapUsage() {
    NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();
    for (NodeInfo node : response.getNodes()) {
        System.out.println("Node name: " + node.getName());
        JvmInfo jvmInfo = node.getJvm();
        System.out.println("Heap used: " + jvmInfo.getMem().getHeapUsed());
        System.out.println("Heap max: " + jvmInfo.getMem().getHeapMax());
    }
}

2.5 网络使用情况

网络使用情况反映了节点之间的通信负载。如果网络带宽被大量占用,可能会导致节点间通信延迟增加。

// 示例:获取节点网络使用情况
public void getNodeNetworkUsage() {
    NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();
    for (NodeInfo node : response.getNodes()) {
        System.out.println("Node name: " + node.getName());
        System.out.println("Network rx: " + node.getTransport().getRxCount());
        System.out.println("Network tx: " + node.getTransport().getTxCount());
    }
}

3. 索引指标

3.1 文档数量

文档数量反映了索引中存储的数据量。通过监控文档数量的变化趋势,可以了解业务数据的增长情况。

// 示例:获取索引文档数量
public void getIndexDocCount(String indexName) {
    GetIndexResponse response = client.admin().indices().getIndex(new GetIndexRequest(indexName)).actionGet();
    long docCount = response.getIndices().get(indexName).getDocs().getCount();
    System.out.println("Document count in index '" + indexName + "': " + docCount);
}

3.2 索引大小

索引大小反映了存储在磁盘上的数据量。通过监控索引大小的变化,可以了解数据的增长趋势,并提前规划存储资源。

// 示例:获取索引大小
public void getIndexSize(String indexName) {
    GetIndexResponse response = client.admin().indices().getIndex(new GetIndexRequest(indexName)).actionGet();
    long storeSize = response.getIndices().get(indexName).getStore().getSizeInBytes();
    System.out.println("Index size of '" + indexName + "': " + storeSize + " bytes");
}

3.3 索引操作统计

索引操作统计包括插入、更新、删除等操作的数量和耗时。通过这些指标可以了解索引操作的负载情况。

// 示例:获取索引操作统计
public void getIndexOperations(String indexName) {
    IndexStatsResponse response = client.admin().indices().stats(new IndexStatsRequest(indexName)).actionGet();
    IndexStats stats = response.getIndexStats().get(0);
    System.out.println("Index name: " + indexName);
    System.out.println("Insert count: " + stats.getTotal().getIndexing().getTotal());
    System.out.println("Update count: " + stats.getTotal().getIndexing().getUpdate());
    System.out.println("Delete count: " + stats.getTotal().getIndexing().getDelete());
}

3.4 索引碎片化程度

索引碎片化程度反映了索引段的分布情况。高碎片化会导致查询性能下降。

// 示例:获取索引碎片化程度
public void getIndexFragmentation(String indexName) {
    IndexStatsResponse response = client.admin().indices().stats(new IndexStatsRequest(indexName)).actionGet();
    IndexStats stats = response.getIndexStats().get(0);
    long totalSegments = stats.getTotal().getSegments().getNum();
    long totalShards = stats.getTotal().getShards().getPrimary();
    double fragmentation = (double) totalSegments / (totalShards * 2); // 考虑副本
    System.out.println("Fragmentation level of '" + indexName + "': " + fragmentation);
}

4. 搜索性能指标

4.1 查询延迟

查询延迟反映了搜索请求的响应时间。通过监控查询延迟的变化趋势,可以识别性能瓶颈。

// 示例:获取搜索延迟统计
public void getSearchLatency() {
    SearchResponse response = client.search(new SearchRequest()
        .indices("your_index")
        .source(new SearchSourceBuilder()
            .query(QueryBuilders.matchAllQuery())
            .size(0)
            .aggregation(AggregationBuilders.avg("avg_latency").field("_score"))), RequestOptions.DEFAULT);
    Aggregations aggregations = response.getAggregations();
    if (aggregations != null) {
        Avg avg = aggregations.get("avg_latency");
        System.out.println("Average search latency: " + avg.getValue());
    }
}

4.2 查询吞吐量

查询吞吐量反映了单位时间内处理的搜索请求数量。通过监控吞吐量的变化趋势,可以了解系统的处理能力。

// 示例:获取搜索吞吐量统计
public void getSearchThroughput() {
    SearchResponse response = client.search(new SearchRequest()
        .indices("your_index")
        .source(new SearchSourceBuilder()
            .query(QueryBuilders.matchAllQuery())
            .size(0)
            .aggregation(AggregationBuilders.sum("sum_throughput").field("_score"))), RequestOptions.DEFAULT);
    Aggregations aggregations = response.getAggregations();
    if (aggregations != null) {
        Sum sum = aggregations.get("sum_throughput");
        System.out.println("Total search throughput: " + sum.getValue());
    }
}

4.3 聚合操作性能

聚合操作性能反映了复杂查询(如分组、排序等)的执行效率。通过监控聚合操作的性能指标,可以优化查询逻辑。

// 示例:获取聚合操作性能统计
public void getAggregationPerformance() {
    SearchResponse response = client.search(new SearchRequest()
        .indices("your_index")
        .source(new SearchSourceBuilder()
            .query(QueryBuilders.matchAllQuery())
            .size(0)
            .aggregation(AggregationBuilders.dateHistogram("histogram").field("@timestamp").interval(DateHistogramInterval.DAY))), RequestOptions.DEFAULT);
    Aggregations aggregations = response.getAggregations();
    if (aggregations != null) {
        Histogram histogram = aggregations.get("histogram");
        System.out.println("Number of buckets: " + histogram.getBuckets().size());
    }
}

4.4 响应时间分布

响应时间分布反映了不同时间段内搜索请求的响应时间分布情况。通过分析响应时间分布,可以识别长尾请求的影响。

// 示例:获取响应时间分布统计
public void getResponseTimeDistribution() {
    SearchResponse response = client.search(new SearchRequest()
        .indices("your_index")
        .source(new SearchSourceBuilder()
            .query(QueryBuilders.matchAllQuery())
            .size(0)
            .aggregation(AggregationBuilders.range("response_time_range").field("_score")
                .addRange(0, 100)
                .addRange(100, 500)
                .addRange(500, Double.POSITIVE_INFINITY))), RequestOptions.DEFAULT);
    Aggregations aggregations = response.getAggregations();
    if (aggregations != null) {
        Range range = aggregations.get("response_time_range");
        for (Range.Bucket bucket : range.getBuckets()) {
            String key = bucket.getKeyAsString();
            long docCount = bucket.getDocCount();
            System.out.println("Response time range: " + key + ", Doc count: " + docCount);
        }
    }
}

5. 通过 Java API 获取监控指标

5.1 使用 REST API 获取节点状态

Elasticsearch 提供了丰富的 REST API 接口用于获取集群和节点的状态信息。通过这些接口,我们可以轻松地获取 CPU、内存、磁盘等资源的使用情况。

// 示例:获取节点状态信息
public void getNodeStatus() {
    NodesInfoResponse response = client.admin().cluster().nodesInfo(new NodesInfoRequest()).actionGet();
    for (NodeInfo node : response.getNodes()) {
        System.out.println("Node name: " + node.getName());
        System.out.println("Node status: " + node.getStatus());
        System.out.println("Node version: " + node.getVersion());
    }
}

5.2 使用 Java High Level REST Client 获取索引统计信息

Java High Level REST Client 是 Elasticsearch 官方提供的 Java 客户端库,支持通过简洁的 API 访问 Elasticsearch 的各种功能。

// 示例:获取索引统计信息
public void getIndexStats(String indexName) {
    IndexStatsResponse response = client.admin().indices().stats(new IndexStatsRequest(indexName)).actionGet();
    IndexStats stats = response.getIndexStats().get(0);
    System.out.println("Index name: " + indexName);
    System.out.println("Document count: " + stats.getTotal().getDocs().getCount());
    System.out.println("Index size: " + stats.getTotal().getStore().getSizeInBytes());
}

5.3 实时监控搜索性能

通过 Java API 可以实时监控搜索请求的执行情况,并根据结果进行动态调整。

// 示例:实时监控搜索性能
public void monitorSearchPerformance() {
    SearchRequest request = new SearchRequest()
        .indices("your_index")
        .source(new SearchSourceBuilder()
            .query(QueryBuilders.matchAllQuery())
            .size(0));
    
    while (true) {
        try {
            SearchResponse response = client.search(request, RequestOptions.DEFAULT);
            long tookInMillis = response.getTookInMillis();
            System.out.println("Search took: " + tookInMillis + " ms");
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            break;
        }
    }
}

6. 可视化工具:Kibana 的应用

6.1 Kibana 的安装与配置

Kibana 是 Elasticsearch 官方提供的可视化工具,支持创建丰富的仪表盘和图表来展示集群的运行状态。

安装 Kibana
sudo apt-get install kibana

配置 Kibana
编辑 /etc/kibana/kibana.yml 文件
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://localhost:9200"]

6.2 创建监控仪表盘

在 Kibana 中可以通过拖拽式界面创建自定义仪表盘,展示 CPU 使用率、内存使用率等关键指标。

// 示例:创建一个包含 CPU 使用率图表的仪表盘
{
  "title": "Cluster Overview",
  "description": "Monitor cluster health and performance",
  "panelsJSON": [
    {
      "type": "metric",
      "id": "cpu_usage",
      "grid": { "x": 0, "y": 0, "w": 6, "h": 4 },
      "options": {
        "metrics": [
          { "id": "node.cpu.percent", "type": "avg" }
        ],
        "timeRange": { "from": "now-5m", "to": "now" }
      }
    }
  ]
}

6.3 实时监控与告警设置

Kibana 支持设置告警规则,当某个指标超过阈值时触发告警通知。

// 示例:设置 CPU 使用率告警规则
{
  "name": "High CPU Usage Alert",
  "description": "Trigger when CPU usage exceeds 80%",
  "condition": {
    "metric": {
      "aggregation": "avg",
      "field": "node.cpu.percent",
      "operator": ">=",
      "value": 80
    }
  },
  "actions": [
    {
      "type": "email",
      "to": "admin@example.com",
      "subject": "[ALERT] High CPU Usage Detected"
    }
  ]
}

7. 总结与展望

通过对 Elasticsearch 集群监控指标的深入分析和实践,我们能够全面了解集群的运行状态,并采取相应的优化措施以保障系统的稳定性和高效性。随着业务规模的不断扩大和技术的发展,Elasticsearch 集群监控的需求也将变得更加多样化和复杂化。未来,我们可以进一步探索以下方向:

  • 智能化监控:利用机器学习算法对历史数据进行分析和预测,实现智能化的异常检测和容量规划。
  • 自动化优化:结合自动化工具(如 Elastic Stack 的 Curator 工具),实现索引生命周期管理、节点自动扩缩容等功能。
  • 多集群管理:针对大规模分布式环境下的多集群管理需求,开发统一的监控和管理系统。

总之,Elasticsearch 集群监控是一项需要持续关注和投入的工作。只有通过不断的实践和优化,才能真正实现对集群的全面掌控,并为企业创造更大的价值。


8. 参考资料

  1. Elasticsearch 官方文档
  2. Kibana 官方文档
  3. Java High Level REST Client 文档
  4. Prometheus 官方文档
  5. Grafana 官方文档

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296651.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙接入支付宝SDK后模拟器无法运行,报错error: install parse native so failed.

鸿蒙项目接入支付宝后,运行提示error: install parse native so failed. 该问题可能由于设备支持的 Abi 类型与 C 工程中的不匹配导致. 官网error: install parse native so failed.错误解决办法 根据官网提示在模块build-profile.json5中添加“x86_64”依然报错 问…

react redux用法学习

参考资料: https://www.bilibili.com/video/BV1ZB4y1Z7o8 https://cn.redux.js.org/tutorials/essentials/part-5-async-logic AI工具:deepseek,通义灵码 第一天 安装相关依赖: 使用redux的中间件: npm i react-redu…

【Matlab优化算法-第13期】基于多目标优化算法的水库流量调度

一、前言 水库流量优化是水资源管理中的一个重要环节,通过合理调度水库流量,可以有效平衡防洪、发电和水资源利用等多方面的需求。本文将介绍一个水库流量优化模型,包括其约束条件、目标函数以及应用场景。 二、模型概述 水库流量优化模型…

Redis 集群(Cluster)和基础的操作 部署实操篇

三主三从 集群概念 Redis 的哨兵模式,提高了系统的可用性,但是正在用来存储数据的还是 master 和 slave 节点,所有的数据都需要存储在单个 master 和 salve 节点中。 如果数据量很大,接近超出了 master / slave 所在机器的物理内…

[2025年最新]2024.3版本idea无法安装插件问题解决

背景 随着大模型的持续发展,特别年前年后deepseek的优异表现,编程过程中,需要解决ai来辅助编程,因此需要安装一些大模型插件 问题描述 在线安装插件的时候会遇到以下问题: 1.数据一直在加载,加载的很满 2.点…

elasticsearch安装插件analysis-ik分词器(深度研究docker内elasticsearch安装插件的位置)

最近在学习使用elasticsearch,但是在安装插件ik的时候遇到许多问题。 所以在这里开始对elasticsearch做一个深度的研究。 首先提供如下链接: https://github.com/infinilabs/analysis-ik/releases 我们下载elasticsearch-7-17-2的Linux x86_64版本 …

【Unity3D】UGUI的anchoredPosition锚点坐标

本文直接以实战去理解锚点坐标,围绕着将一个UI移动到另一个UI位置的需求进行说明。 (anchoredPosition)UI锚点坐标,它是UI物体的中心点坐标,以UI物体锚点为中心的坐标系得来,UI锚点坐标受锚点(Anchors Min…

C++多态性之包含多态(一)—学习记录

一、C的包含多态 面向对象程序设计的四大特点为抽象、封装、继承和多态,其中,多态性可以提高代码的可拓展性和可维护性。 多态是指同样的消息被不同类型的对象接收时导致不同的行为。所谓消息是指对类的成员函数的调用,不同的行为是指不同的实…

KERL文献阅读分享:知识图谱与预训练语言模型赋能会话推荐系统

标题期刊年份Knowledge Graphs and Pre-trained Language Models enhanced Representation Learning for Conversational Recommender SystemsJournal of LaTeX Class Files2021 📈研究背景 在数字时代,个性化推荐系统已经成为了我们生活的一部分。从电…

从零开始:使用Jenkins实现高效自动化部署

在这篇文章中我们将深入探讨如何通过Jenkins构建高效的自动化部署流水线,帮助团队实现从代码提交到生产环境部署的全流程自动化。无论你是Jenkins新手还是有一定经验的开发者,这篇文章都会为你提供实用的技巧和最佳实践,助你在项目部署中走得…

hive的几种复杂数据类型

Hive的几种复杂数据类型 Hive 提供了几种复杂数据类型,能够支持更灵活和多样的数据存储。这些复杂数据类型对于处理嵌套数据或不规则数据特别有用。主要包括以下几种: 文章目录 Hive的几种复杂数据类型1. 数组(ARRAY)2. 结构体&a…

序列化/反序列化与TCP通信协议

深入理解序列化/反序列化与TCP通信协议 一、序列化与反序列化 1.1 基本概念 序列化(Serialization): 将数据结构或对象状态转换为可存储/传输格式的过程反序列化(Deserialization): 将序列化后的数据恢复为原始数据结构的过程 …

Ollama 本地部署 体验 deepseek

下载安装ollama,选择模型 进行部署 # 管理员命令行 执行 ollama run deepseek-r1:70b浏览器访问http://ip:11434/ 返回 Ollama is runninghttp://ip:11434/v1/models 返回当前部署的模型数据 下载安装CherryStudio,本地对话UI 客户端 在设置中 修改API地址&#x…

Linux探秘坊-------4.进度条小程序

1.缓冲区 #include <stdio.h> int main() {printf("hello bite!");sleep(2);return 0; }执行此代码后&#xff0c;会 先停顿两秒&#xff0c;再打印出hello bite&#xff0c;但是明明打印在sleep前面&#xff0c;为什么会后打印呢&#xff1f; 因为&#xff…

postgreSQL16.6源码安装

1.获取源码 从PostgreSQL: File Browser获取tar.bz2或者tar.gz源码 2.解压 tar xf postgresql-version.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# tar xf postgresql-16.6.tar.bz2 roothwz-VMware-Virtual-Platform:/usr/local# ll 总计 24324 drwxr-xr-x 12 ro…

树莓派上 基于Opencv 实现人脸检测与人脸识别

一&#xff0c;需求 基于树莓派4b&#xff0c;usb1080p摄像头&#xff0c;实现人脸检测与人脸识别。尝试了海陵科的模组和百度的sdk。海陵科的模组无法录入人脸&#xff0c;浪费了100多块钱。百度的sdk 在树莓派上也无法录入人脸&#xff0c;官方解决不了。最后只能用opencv自…

mac下dify+deepseek部署,实现私人知识库

目前deepseek 十分火爆&#xff0c;本地部署实现私有知识库&#xff0c;帮助自己日常工作&#xff0c;上一篇使用工具cherry studio可以做到私人知识库。今天学习了一下&#xff0c;使用Dify链接deepseek&#xff0c;实现私人知识库&#xff0c;也非常不错&#xff0c;这里分享…

CSS 实现下拉菜单效果实例解析

1. 引言 在 Web 开发过程中&#xff0c;下拉菜单是一种常见且十分实用的交互组件。很多前端教程都提供过简单的下拉菜单示例&#xff0c;本文将以一个简洁的实例为出发点&#xff0c;从 HTML 结构、CSS 样式以及整体交互逻辑三个层面进行详细解析&#xff0c;帮助大家理解纯 C…

x64、aarch64、arm与RISC-V64:详解四种处理器架构

x64、aarch64、arm与RISC-V64:详解四种处理器架构 x64架构aarch64架构ARM架构RISC-V64架构总结与展望在计算机科学领域,处理器架构是构建计算机系统的基石,它决定了计算机如何执行指令、管理内存和处理数据。x64、aarch64、arm与RISC-V64是当前主流的四种处理器架构,它们在…

Java使用aspose实现pdf转word

Java使用aspose实现pdf转word 一、下载aspose-pdf-21.6.jar包【下载地址】&#xff0c;存放目录结构如图&#xff1b;配置pom.xml。 <!--pdf to word--> <dependency><groupId>com.aspose</groupId><artifactId>aspose-pdf</artifactId>…