基于Kubernetes的Apache Pulsar云原生架構解析與集群部署指南(下)

文章目錄

  • k8s安裝部署Pulsar集群
  • 前期準備
    • 版本要求
  • 安裝 Pulsar Helm chart
  • 管理pulsar
    • Clusters
    • Brokers
    • Topic

k8s安裝部署Pulsar集群

前期準備

版本要求

  • Kubernetes 集群,版本 1.14 或更高版本
  • Helm v3(3.0.2 或更高版本)
  • 數據持久化(本文使用NFS CSI動態供給)

K8s集群信息

[root@master ~]# kubectl get node
NAME      STATUS   ROLES           AGE     VERSION
master    Ready    control-plane   77d     v1.24.2
worker1   Ready    <none>          77d     v1.24.2
worker2   Ready    <none>          77d     v1.24.2
worker3   Ready    <none>          4d18h   v1.24.2

Helm安裝

wget https://get.helm.sh/helm-v3.17.2-linux-amd64.tar.gz
tar xf helm-v3.17.2-linux-amd64.tar.gz
chown root:root helm
mv linux-amd64/helm /usr/local/sbin/
helm version

NFS server部署
本文使用yum 包部署nfs server

nfs server主機安裝nfs相關軟件包

yum install nfs-utils -y

啟動nfs server 相關服務

sudo systemctl start rpcbind
systemctl enable rpcbind
systemctl start nfs-server
systemctl enable nfs-server

配置nfs共享目錄導出
(/nfsdata目錄為主機單獨一塊磁盤的掛載點,需提前配置完成。)

vim /etc/exports
/nfsdata 192.168.61.0/24(rw,sync,no_subtree_check,no_root_squash)

導出共享目錄
exportfs -ra

為數據持久化部署csi storageclass
本文使用nfs csi storageclass,但nfs不具有高可用性,生產環境建議使用ceph,glusterfs分布式的存儲解決方案。
在 Kubernetes 中,NFS CSI(Container Storage Interface)StorageClass 提供了一種標準化的方式來動態供應基于 NFS(Network File System)的持久化存儲卷。通過使用 NFS CSI 驅動程序和相應的 StorageClass,用戶可以更方便地請求、分配和管理持久化存儲資源,而無需手動創建 PersistentVolume(PV)。

nfs csi storageclass安裝部署步驟參考:
https://github.com/kubernetes-csi/csi-driver-nfs

安裝 Pulsar Helm chart

添加 Pulsar repo

helm repo add apache https://pulsar.apache.org/charts
helm repo update

列出可部署的版本,可以看出chart和pulsar的版本并非一一對應。

本文要安裝的pulsar版本為2.10.2,因此選擇pulsar heml對應版本為3.0.0

[root@master pulsar-helm-chart]# helm search repo apache/pulsar --versions
NAME            CHART VERSION   APP VERSION     DESCRIPTION                            
apache/pulsar   4.0.0           4.0.3           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.9.0           4.0.2           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.8.0           4.0.1           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.7.0           4.0.0           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.6.0           3.0.7           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.5.0           3.0.6           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.4.1           3.0.5           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.4.0           3.0.4           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.3.1           3.0.3           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.3.0           3.0.2           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.2.0           3.0.2           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.1.0           3.0.2           Apache Pulsar Helm chart for Kubernetes
apache/pulsar   3.0.0           2.10.2          Apache Pulsar Helm chart for Kubernetes
apache/pulsar   2.9.4           2.9.3           Apache Pulsar Helm chart for Kubernetes

從helm倉庫中下載指定版本的pulsar helm chart 安裝包

helm pull apache/pulsar --version 3.0.0
pulsar-3.0.0.tgztar xf pulsar-3.0.0.tgz
cd pulsarls -l

總用量 68K

-rw-r--r-- 1 root root  253 10月 21  2022 Chart.lock
drwxr-xr-x 3 root root 4.0K  4月 23 22:01 charts
-rw-r--r-- 1 root root  529 10月 21  2022 Chart.yaml
-rw-r--r-- 1 root root  13K 10月 21  2022 LICENSE
-rw-r--r-- 1 root root  167 10月 21  2022 NOTICE
drwxr-xr-x 2 root root 4.0K  4月 23 22:01 templates
-rw-r--r-- 1 root root  32K  4月 24 10:48 values.yaml

通過修改配置文件指定pulsar版本

vim scripts/pulsar/common_auth.sh
…
PULSAR_VERSION="2.10.2"
…

參考以下內容修改values.yaml文件

namespace: "pulsar"
initialize: true
volumes:persistence: truelocal_storage: false
…
components:# zookeeperzookeeper: true
…# pulsar managerpulsar_manager: true
…
images:zookeeper:repository: apachepulsar/pulsar-all# uses defaultPulsarImageTag when unspecifiedtag: 2.10.2pullPolicy: IfNotPresentbookie:repository: apachepulsar/pulsar-all# uses defaultPulsarImageTag when unspecifiedtag: 2.10.2pullPolicy: IfNotPresent
…pulsar_manager:repository: apachepulsar/pulsar-managertag: v0.3.0pullPolicy: IfNotPresent
hasCommand: false
…
zookeeper:
volumes:persistence: truedata:storageClassName: nfs-csi
…
bookkeeper:
volumes:
persistence: true
journal:name: journalsize: 10Gilocal_storage: falsestorageClassName: nfs-csiledgers:name: ledgerssize: 50Gilocal_storage: falsestorageClassName: nfs-csi
…
kube-prometheus-stack:enabled: false
…

使用 Pulsar Helm將 Pulsar 集群安裝到 Kubernetes。

helm install \--values values.yaml \--set initialize=true \--version 3.0.0 \pulsar01 apache/pulsar

查看pod的狀態

[root@master pulsar]# kubectl get pod -n pulsar 
NAME                                      READY   STATUS      RESTARTS      AGE
pulsar01-bookie-0                         1/1     Running     0             13h
pulsar01-bookie-1                         1/1     Running     0             13h
pulsar01-bookie-2                         1/1     Running     0             13h
pulsar01-bookie-init-zb9gt                0/1     Completed   0             13h
pulsar01-broker-0                         1/1     Running     3 (12h ago)   13h
pulsar01-broker-1                         1/1     Running     3 (12h ago)   13h
pulsar01-broker-2                         1/1     Running     1 (13h ago)   13h
pulsar01-proxy-0                          1/1     Running     0             13h
pulsar01-pulsar-init-6zcx5                0/1     Completed   0             13h
pulsar01-pulsar-manager-f856cd9c6-fzj72   1/1     Running     0             33m
pulsar01-recovery-0                       1/1     Running     0             13h
pulsar01-toolset-0                        1/1     Running     0             13h
pulsar01-zookeeper-0                      1/1     Running     0             13h
pulsar01-zookeeper-1                      1/1     Running     0             13h
pulsar01-zookeeper-2                      1/1     Running     0             13h

查看svc

[root@master pulsar]# kubectl get svc -n pulsar 
NAME                      TYPE           CLUSTER-IP      EXTERNAL-IP   PORT(S)                               AGE
pulsar01-bookie           ClusterIP      None            <none>        3181/TCP,8000/TCP                     13h
pulsar01-broker           ClusterIP      None            <none>        8080/TCP,6650/TCP                     13h
pulsar01-proxy            LoadBalancer   10.96.97.171    <pending>     80:31682/TCP,6650:30689/TCP           13h
pulsar01-pulsar-manager   LoadBalancer   10.100.16.216   <pending>     9527:31991/TCP                        33m
pulsar01-recovery         ClusterIP      None            <none>        8000/TCP                              13h
pulsar01-toolset          ClusterIP      None            <none>        <none>                                13h
pulsar01-zookeeper        ClusterIP      None            <none>        8000/TCP,2888/TCP,3888/TCP,2181/TCP   13h

查看pvc

[root@master pulsar]# kubectl get pvc -n pulsar 
NAME                                           STATUS   VOLUME                                     CAPACITY   ACCESS MODES   STORAGECLASS   AGE
pulsar01-bookie-journal-pulsar01-bookie-0      Bound    pvc-c86bb6dd-d98e-4b0f-b9f0-c67c169a5255   10Gi       RWO            nfs-csi        13h
pulsar01-bookie-journal-pulsar01-bookie-1      Bound    pvc-e7c2935d-d4cf-4cad-8d63-5dc87dbcae5a   10Gi       RWO            nfs-csi        13h
pulsar01-bookie-journal-pulsar01-bookie-2      Bound    pvc-9dfa73ec-8512-495a-ad6d-d3141a97128d   10Gi       RWO            nfs-csi        13h
pulsar01-bookie-journal-pulsar01-bookie-3      Bound    pvc-1f038b9a-4d0d-46c8-89ca-dc8f630ade76   10Gi       RWO            nfs-csi        13h
pulsar01-bookie-ledgers-pulsar01-bookie-0      Bound    pvc-8fcb5205-eef2-4903-90e4-68499746c8d8   50Gi       RWO            nfs-csi        13h
pulsar01-bookie-ledgers-pulsar01-bookie-1      Bound    pvc-4412bca2-4314-4fd6-9fb0-85bf1472fd53   50Gi       RWO            nfs-csi        13h
pulsar01-bookie-ledgers-pulsar01-bookie-2      Bound    pvc-a0fae489-99f9-4f39-ba7d-a543d2691502   50Gi       RWO            nfs-csi        13h
pulsar01-bookie-ledgers-pulsar01-bookie-3      Bound    pvc-0124e56b-0c28-4b24-92be-019acb8331a8   50Gi       RWO            nfs-csi        13h
pulsar01-zookeeper-data-pulsar01-zookeeper-0   Bound    pvc-81219d17-27f6-4ee0-864c-9f1a296f85cd   20Gi       RWO            nfs-csi        13h
pulsar01-zookeeper-data-pulsar01-zookeeper-1   Bound    pvc-8571b0c0-9ad9-4a5c-9582-0a81fda4c6ff   20Gi       RWO            nfs-csi        13h
pulsar01-zookeeper-data-pulsar01-zookeeper-2   Bound    pvc-ab41f541-c9a1-475b-ab07-cb1b90b47c87   20Gi       RWO            nfs-csi        13h

在修改values.yaml后可以使用upgrade更新部署

[root@master pulsar]# helm upgrade --values values.yaml --set initialize=true --version 3.0.0 pulsar01 apache/pulsar
Release "pulsar01" has been upgraded. Happy Helming!
NAME: pulsar01
LAST DEPLOYED: Thu Apr 24 10:48:19 2025
NAMESPACE: default
STATUS: deployed
REVISION: 4
TEST SUITE: None

c如何刪除集群

[root@master pulsar]# helm list
NAME            NAMESPACE       REVISION        UPDATED                                 STATUS          CHART           APP VERSION
pulsar01        default         4               2025-04-24 10:48:19.873604446 +0800 CST deployed        pulsar-3.0.0    2.10.2    [root@master pulsar]# helm uninstall pulsar01 --namespace pulsar
release "pulsar01 " uninstalled[root@master pulsar]# helm list --namespace pulsar
NAME    NAMESPACE       REVISION        UPDATED STATUS  CHART   APP VERSION

管理pulsar

Clusters

獲取現有集群的配置

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin clusters get pulsar01
{"serviceUrl" : "http://pulsar01-broker.pulsar.svc.cluster.local:8080/","serviceUrlTls" : "https://pulsar01-broker.pulsar.svc.cluster.local:8443/","brokerServiceUrl" : "pulsar://pulsar01-broker.pulsar.svc.cluster.local:6650/","brokerServiceUrlTls" : "pulsar+ssl://pulsar01-broker.pulsar.svc.cluster.local:6651/","brokerClientTlsEnabled" : false,"tlsAllowInsecureConnection" : false,"brokerClientTlsEnabledWithKeyStore" : false,"brokerClientTlsTrustStoreType" : "JKS"
}

獲取 Pulsar實例中所有集群的列表

I have no name!@pulsar01-toolset-0:/pulsar/bin$./pulsar-admin clusters list
pulsar01I have no name!@pulsar01-toolset-0:/pulsar/bin$ curl -X GET "http://pulsar01-proxy.pulsar.svc.cluster.local/admin/v2/clusters"v2/clusters"
["pulsar01"]
Tenants

列出所有租戶

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin tenants list
public
pulsarI have no name!@pulsar01-toolset-0:/pulsar/bin$ curl -X GET "http://pulsar01-proxy.pulsar.svc.cluster.local/admin/v2/tenants"
["public","pulsar"]

新創建1個名為my-tenant的租戶

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin tenants create my-tenant

創建租戶時,您可以選擇使用-r/–admin-roles 標志分配管理員角色,并使用-c/–

allowed-clusters標志分配集群。您可以以逗號分隔的列表形式指定多個值。
I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin tenants create my-tenant2 -r role1 -c pulsar01curl -X PUT "http://pulsar01-proxy/admin/v2/tenants/my-tenant3" \
> -H "Content-Type: application/json" \
> -d '{
>   "allowedClusters": ["pulsar01"],
>   "adminRoles": ["role1"]
> }'

獲取現有租戶的配置。

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin tenants get my-tenant2                                                
{"adminRoles" : [ "role1" ],"allowedClusters" : [ "pulsar01" ]
}I have no name!@pulsar01-toolset-0:/pulsar$ curl -X GET "http://pulsar01-proxy/admin/v2/tenants/my-tenant3"
{"adminRoles":["role1"],"allowedClusters":["pulsar01"]}

刪除指定租戶

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin tenants delete my-tenantI have no name!@pulsar01-toolset-0:/pulsar$ curl -X DELETE "http://pulsar01-proxy/admin/v2/tenants/my-tenant"

Brokers

可以通過以下方式管理broker:

  • 工具brokers的命令pulsar-admin
  • /admin/v2/brokers管理REST API的端點

列出所有活躍的broker

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin brokers list use 
pulsar01-broker-2.pulsar01-broker.pulsar.svc.cluster.local:8080
pulsar01-broker-1.pulsar01-broker.pulsar.svc.cluster.local:8080
pulsar01-broker-0.pulsar01-broker.pulsar.svc.cluster.local:8080curl -s -X GET "http://pulsar01-proxy.pulsar/admin/v2/brokers/pulsar01"    
["pulsar01-broker-2.pulsar01-broker.pulsar.svc.cluster.local:8080","pulsar01-broker-1.pulsar01-broker.pulsar.svc.cluster.local:8080","pulsar01-broker-0.pulsar01-broker.pulsar.svc.cluster.local:8080"]

列出指定broker擁有和服務的所有命名空間。

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin brokers namespaces use --url pulsar01-broker-2.pulsar01-broker.pulsar.svc.cluster.local:8080
pulsar/pulsar01/pulsar01-broker-2.pulsar01-broker.pulsar.svc.cluster.local:8080/0x00000000_0xffffffff    [broker_assignment=shared is_controlled=false is_active=true]
pulsar/pulsar01-broker-2.pulsar01-broker.pulsar.svc.cluster.local:8080/0x00000000_0xffffffff    [broker_assignment=shared is_controlled=false is_active=true]
public/functions/0x40000000_0x80000000    [broker_assignment=shared is_controlled=false is_active=true]
public/default/0x20000000_0x30000000    [broker_assignment=shared is_controlled=false is_active=true]

獲取broker的監控指標數據

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin broker-stats monitoring-metrics

此命令輸出的內容較多,為json格式,建議使用jq格式化,更易閱讀。
涵蓋了 Pulsar Broker 的多個關鍵方面,包括:

  • Managed Ledger 緩存性能。
  • Topic 加載時間。
  • ZooKeeper 交互延遲。
  • JVM 性能和資源使用。
  • Broker 客戶端連接狀態。
  • 負載均衡資源使用。
    查看broker的健康狀態
I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin brokers healthcheck
Ok

查看broker的版本:

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin brokers version    
2.10.2

Topic

創建topic

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin topics create persistent://public/default/my-topic-1

創建3分區的topic

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin topics create-partitioned-topic persistent://public/default/my-partitioned-topic --partitions 3

查看topic狀態

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin topics stats persistent://public/default/my-topic-1I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin topics  partitioned-stats persistent://public/default/my-partitioned-topic --per-partition

Topic增加分區

I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin topics update-partitioned-topic persistent://public/default/my-partitioned-topic --partitions 6

分區數量應與預期的吞吐量需求相匹配。例如:

  • 如果你預計每秒需要處理 100,000 條消息,并且單個分區的吞吐量為 10,000 條/秒,則至少需要 10 個分區。
  • 如果你的集群有 5 個 Broker,那么 10 個分區可以均勻分布在這些 Broker 上,每個 Broker 處理 2 個分區
    查看指定topic的ledgerId
I have no name!@pulsar01-toolset-0:/pulsar/bin$ ./pulsar-admin topics info-internal persistent://public/default/my-topic
{"version": 7,"creationDate": "2025-04-23T14:29:59.347Z","modificationDate": "2025-04-25T03:54:25.812Z","ledgers": [{"ledgerId": 11,"entries": 36,"size": 1870,"isOffloaded": false},{"ledgerId": 18,"entries": 1,"size": 48,"isOffloaded": false},{"ledgerId": 28,"isOffloaded": false}],

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/79432.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/79432.shtml
英文地址,請注明出處:http://en.pswp.cn/web/79432.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

C35-數組和函數開發初見

一 數組作為函數的參數 用于傳遞數組中的某一個元素→意義不大 數組名當做函數實際參數 示例 代碼 #include <stdio.h>//封裝函數PrintArr void PrintArr(int arr[3]){int i;for(i0;i<3;i){printf("%d ",arr[i]);}putchar(\n);}//主函數 int main() { …

【小沐學GIS】基于C++繪制二維瓦片地圖2D Map(QT、OpenGL、GIS)

&#x1f37a;三維數字地球系列相關文章如下&#x1f37a;&#xff1a;1【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut&#xff09;第一期2【小沐學GIS】基于C繪制三維數字地球Earth&#xff08;OpenGL、glfw、glut、GIS&#xff09;第二期3【小沐學…

idea左側項目資源管理器不見了處理

使用idea誤觸導致&#xff0c;側邊欄和功能欄沒了&#xff0c;如何打開&#xff1f; 1.打開文件&#xff08;File&#xff09; 2. 打開設置&#xff08;Settings&#xff09; 3.選擇Appearance&Behavior--->Appearance劃到最下面&#xff0c;開啟顯示工具欄和左側并排布…

[Java實戰]Spring Boot 靜態資源配置(十三)

[Java實戰]Spring Boot 靜態資源配置&#xff08;十三&#xff09; 引言 靜態資源&#xff08;如 HTML、CSS、JavaScript、圖片等&#xff09;是 Web 應用的基石。Spring Boot 通過自動化配置簡化了靜態資源管理&#xff0c;但面對復雜場景&#xff08;如多模塊項目、CDN 集成…

多模態大語言模型arxiv論文略讀(六十九)

Prompt-Aware Adapter: Towards Learning Adaptive Visual Tokens for Multimodal Large Language Models ?? 論文標題&#xff1a;Prompt-Aware Adapter: Towards Learning Adaptive Visual Tokens for Multimodal Large Language Models ?? 論文作者&#xff1a;Yue Zha…

Python 基礎語法與數據類型(七) - 函數的定義與調用 (def, return)

文章目錄 為什么要使用函數&#xff1f;函數的定義 (def)函數的調用函數參數 (Parameters vs Arguments)返回值 (return)變量作用域 (簡要了解)總結練習題練習題答案 **創作不易&#xff0c;請大家點贊加收藏&#xff0c;關注我&#xff0c;持續更新教程&#xff01;** 到目前為…

華為配置篇-RSTP/MSTP實驗

MSTP 一、簡介二、常用命令總結三、實驗 一、簡介 RSTP&#xff08;快速生成樹協議&#xff09;? RSTP&#xff08;Rapid Spanning Tree Protocol&#xff09;是 STP 的改進版本&#xff0c;基于 ??IEEE 802.1w 標準??&#xff0c;核心目標是解決傳統 STP 收斂速度慢的問…

Docker Compose 完全指南:從入門到生產實踐

Docker Compose 完全指南&#xff1a;從入門到生產實踐 1. Docker Compose 簡介與核心價值 Docker Compose 是一個用于定義和運行多容器 Docker 應用程序的工具。通過一個 YAML 文件來配置應用的服務&#xff0c;只需簡單命令就能創建和啟動所有服務。 核心優勢&#xff1a;…

Linux 離線安裝 Docker 和 Docker Compose 最新版 的完整指南

一、準備工作 1. 下載安裝包?&#xff08;需在有網絡的機器操作&#xff09;&#xff1a; Docker 引擎&#xff1a;從官方倉庫下載最新二進制包 wget https://download.docker.com/linux/static/stable/x86_64/docker-24.0.6.tgz?Docker Compose&#xff1a;下載最新二進制…

CSS: 選擇器與三大特性

標簽選擇器 標簽選擇器就是選擇一些HTML的不同標簽&#xff0c;由于它們的標簽需求不同&#xff0c;所以CSS需要設置標簽去選擇它們&#xff0c;為滿足它們的需求給予對應的屬性 基礎選擇器 標簽選擇器 <!DOCTYPE html> <head><title>HOME</title>…

鴻蒙跨平臺開發教程之Uniapp布局基礎

前兩天的文章內容對uniapp開發鴻蒙應用做了一些詳細的介紹&#xff0c;包括配置開發環境和項目結構目錄解讀&#xff0c;今天我們正式開始寫代碼。 入門新的開發語言往往從Hello World開始&#xff0c;Uniapp的初始化項目中已經寫好了一個簡單的demo&#xff0c;這里就不再贅述…

JavaSE核心知識點02面向對象編程02-08(異常處理)

&#x1f91f;致敬讀者 &#x1f7e9;感謝閱讀&#x1f7e6;笑口常開&#x1f7ea;生日快樂?早點睡覺 &#x1f4d8;博主相關 &#x1f7e7;博主信息&#x1f7e8;博客首頁&#x1f7eb;專欄推薦&#x1f7e5;活動信息 文章目錄 JavaSE核心知識點02面向對象編程02-08&#…

【JVM-GC調優】

一、預備知識 掌握GC相關的VM參數&#xff0c;會基本的空間調整掌握相關工具明白一點&#xff1a;調優跟應用、環境有關&#xff0c;沒有放之四海而皆準的法則 二、調優領域 內存鎖競爭cpu占用io 三、確定目標 【低延遲】&#xff1a;CMS、G1&#xff08;低延遲、高吞吐&a…

基于單片機的電子法頻率計

一、電子計數法測頻率原理 通過門控控制閘門開關&#xff0c;閘門時間T自己設定&#xff0c;計數器計數脈沖個數N&#xff08;也就是待測信號&#xff09;&#xff0c;N個脈沖的時間間隔為δt,倒數即為信號的頻率f,由此 δtT/N fN/T——信號頻率 根據公式&#xff0c;如果考慮…

【C/C++】跟我一起學_C++同步機制效率對比與優化策略

文章目錄 C同步機制效率對比與優化策略1 效率對比2 核心同步機制詳解與適用場景3 性能優化建議4 場景對比表5 總結 C同步機制效率對比與優化策略 多線程編程中&#xff0c;同步機制的選擇直接影響程序性能與資源利用率。 主流同步方式: 互斥鎖原子操作讀寫鎖條件變量無鎖數據…

判斷兩臺設備是否在同一局域網內的具體方法

以下是判斷兩臺設備是否在同一局域網內的具體方法&#xff1a; 1. 檢查IP地址和子網掩碼 操作步驟&#xff1a; Windows系統&#xff1a; 按 Win R 鍵&#xff0c;輸入 cmd 并回車。輸入 ipconfig&#xff0c;查看 IPv4 地址 和 子網掩碼&#xff08;如 192.168.1.5/255.255.2…

在R語言中如何將列的名字改成別的

在 R 中&#xff0c;更改數據框&#xff08;data frame&#xff09;中列的名字可以通過多種方法實現。以下是幾種常見的方法&#xff1a; 方法 1&#xff1a;使用 names() 函數 names() 函數可以獲取或設置數據框的列名。 示例 假設我們有一個數據框 data&#xff1a; dat…

JUC并發編程(上)

一、JUC學習準備 核心知識點&#xff1a;進程、線程、并發&#xff08;共享模型、非共享模型&#xff09;、并行 預備知識&#xff1a; 基于JDK8,對函數式編程、lambda有一定了解 采用了slf4j打印日志 采用了lombok簡化java bean編寫 二、進程與線程 進程和線程概念 兩者對比…

單地平面6層PCB設計實戰:如何兼顧電源與信號完整性?

摘要&#xff1a;面對復雜系統&#xff08;SDRAM、WiFi、電機驅動等&#xff09;且僅有1層地平面的6層板設計挑戰&#xff0c;本文從層疊規劃、電源噪聲抑制、高速信號處理等角度&#xff0c;總結可落地的設計技巧與避坑指南。 一、層疊設計&#xff1a;6層板如何“擠”出最優布…

spark:map 和 flatMap 的區別(Scala)

場景設定 假設有一個包含句子的 RDD&#xff1a; scala val rdd sc.parallelize(List("Hello World", "Hi Spark")) 目標是&#xff1a;將每個句子拆分成單詞。 1. 用 map 的效果 代碼示例 scala val resultMap rdd.map(sentence > sentence…