Ubuntu
命令列: gnome-system-monitor
會出現如下類似於windows中工作管理員的系統監視器
gnome-session-properties 是ubuntu的開機啟動項管理器
gnome-terminal
Linux下視窗狀態檢可以透過X11的庫來進行獲取
命令列的方式獲取視窗屬性
xwininfo 命令根據視窗的ID獲取對應的視窗尺寸資訊
xdotool 是一個用於模擬鍵盤、滑鼠和其他輸入裝置動作的工具,常用於自動化任務和測試環境
wmctrl
sudo apt-get install wmctrl
Linux 彈窗
notify-send ["該休息一下啦"] "喝水!伸懶腰!動一動!"
cron命令實現定時彈窗
zenity 和notify-send實現
zenity 命令用於顯示圖形視窗 Zenity是一個Linux下的命令列工具,
它可以生成Gtk+圖形使用者介面(GUI)對話方塊,支援多種視窗型別和選項
whiptail 是一個基於ncurses的工具,它可以幫助我們在終端中建立各種對話方塊
調整終端視窗的字型大小
"ctrl + shift + =" 放大終端視窗的字型
"ctrl + -" 縮小終端視窗的字型
視窗ID 程序ID
檔案
終端檔案型別的區分標識
檔案描述符file descriptor(簡稱fd)
開啟檔案的本質,就是將檔案載入到記憶體
使用者ID 使用者組ID
有效使用者 歷史使用者
虛擬使用者和虛擬組
超級使用者-系統使用者-普通使用者-終端使用者
使用者態和核心態是兩種主要的執行模式,它們代表了不同的訪問級別和許可權,用於確保系統的安全和穩定性
使用者配置檔案 和許可權
身份認證系統————ACL Acess Control List getfacl setfacl
PAM Pluggable authenticat Modules
執行緒-程序-程序組-會話
thread ID、process ID、process group ID session ID
執行緒ID
tid
程序ID
pid、pid number、pid namespace
程序組ID
setpgid、getpgid、
setpgrp和getpgrp
getsid、setsid
執行緒才是是排程器的基本單位
pid namespace
會話ID
sid
父程序-子程序-leaf root parent
核心態: 核心,我們需要使用(pid namespace,ID number)這樣的二元組來表示
現實名稱跟理論名稱是能一一對應起來的.
主機IP和埠號
防火牆
AppArmor,也稱為應用盔甲(Application Armor),是一個 Linux 核心安全模組
systemctl status apparmor
sudo apparmor_status
aa-status 命令
SElinux Security Enhanced Linux
網路-程序-檔案訪問資源 sudo apparmor_status
logrotate logchek
Bash內建兩個補全命令,分別是compgen和complete。compgen命令根據不同的引數,生成匹配單詞的候選補全列表
Kubernates
環境:
Master:
負責整個叢集的管理和控制
kube-apiserver
kube-controller-mamager
kube-scheduler
etcd
Node
kubelet: 向Master註冊自己,並定期彙報自身情況,依賴於docker服務
kube-proxy: 依賴於network服務
Container runtime:docker 或者Containerd
Master和Node有大量的網路通訊
跨主機的容器網路:CNI網路外掛
安全設定: 基於CA簽名的雙向數字證書認證方式 和基於Token的認證方式
合規性測試(K8s-Conformance) 主要是透過一系列自動化測試指令碼和工具來進行驗證的
透過java操作k8s kubernetes-client/java
功能
kube-scheduler: assigns each Pod to a suitable node
服務
services
pod
Replication Controller
使用者
.yaml 格式.
kubectl command-line interface,
1.31.1 (released: 2024-09-11)
1.30.5 (released: 2024-09-10)
1.29.9 (released: 2024-09-10)
1.28.14 (released: 2024-09-10)
rospy 是Python版本的ROS客戶端庫
cyber RT中python API
實現程式碼主要分為5大類的呼叫,
cyber、
parameter、
record、
cyber_time、
cyber_timer,
cyber/python
cyber_py3 資料夾:python使用cyber通訊的底層類和示例檔案
internal 資料夾:C++實現用以和pyton通訊的底層類
具體過程
cyber/python/internal
py_cyber.h
py_cyber.cc
//編譯命令:g++ py_cyber.cc -fPIC -shared -o _cyber_wrapper.so -I /usr/include/python3.6m
// 將c++生成so供python呼叫,使用objdump -tT _cyber_wrapper.so或者nm -D _cyber_wrapper.so命令可以看到so的匯出函式
cyber/python/cyber_py3
cyber.py
_CYBER = importlib.import_module('_cyber_wrapper')
呼叫
準備環境。
1.1 在客戶端環境安裝 Pulsar C++ client,安裝過程可參考官方教程 Pulsar C++ client。
1.2 在專案中引入 Pulsar C++ client 相關標頭檔案及動態庫
1.Kafka基本內容
01.生產者: 同步傳送 非同步傳送 非同步傳送回撥
02.producer topic
KAFKA_BROKER_ID bootstrap_servers
2.Kafka cmd/WebUI
01.docker安裝 : docker run -d --name kafka -p 9092:9092 apache/kafka:3.7.0
本機通訊和外部訪問設定
vim /docker-data/kafka-data/server.properties
# 把 IP 配置成 0.0.0.0 listeners 指明 kafka 當前節點監聽本機的哪個網路卡
listeners=PLAINTEXT://0.0.0.0:9092,CONTROLLER://0.0.0.0:9093
# 我們要透過 linux 訪問 docker 容器中的 kafka 所以把 IP 配置成 linux 的 IP
## advertised.listeners 這個引數為我們伺服器的地址,否則我們透過python是無法向kafka生產訊息
advertised.listeners=PLAINTEXT://自己的 IP:9092
02.web UI
需要安裝KafkaManager
03.Command line
docker exec -it kafka /bin/bash
## 查詢所有Topic列表
/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server localhost:9092
/opt/kafka/bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test
/opt/kafka/bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --partitions 0 --topic localKafka
/opt/kafka/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic localKafka --from-beginning
3.Kafka Client 程式設計
Python 版本
from kafka import KafkaProducer,KafkaConsumer
from kafka.structs import TopicPartition
bootstap_servers
C++版本
librdkafka src是用c實現的原始碼,而src-cpp是在c介面上包裝的一層c++類,實現了基本的功能
必要的引數配置(bootstrap.servers)
RdKafka::Conf *conf = RdKafka::Conf::create(RdKafka::Conf::CONF_GLOBAL);
conf->set("metadata.broker.list", brokers, errstr);
RdKafka::Producer *producer = RdKafka::Producer::create(conf, errstr);
Kafka Conf物件、Topic Conf物件、設定Broker屬性、Producer、Topic物件等
librdkafka 提供的 非同步的生產介面,非同步的消費介面和同步的消費介面,沒有同步的生產介面
RdKafka::Conf RdKafka::Metadata
RdKafka::Producer RdKafka::Topic RdKafka::TopicPartition
RdKafka::Message RdKafka::Event
RdKafka::ErrorCode
RdKafka::EventCb RdKafka::DeliveryReportCb
RdKafka::RebalanceCb RdKafka::PartitionerCb
定義一個 DeliveryReportCb 回撥函式來處理訊息的傳送報告。
這個回撥函式會在訊息成功傳送到Kafka broker或者傳送失敗時被呼叫。
註冊rebalance_cb回撥函式會關閉rdkafka的自動分割槽賦值和再分配並替換應用程式的rebalance_cb回撥函式
Consumer 需要向 Kafka 彙報自己的位移資料,這個彙報過程被稱為提交位移(Committing Offsets)
enable.auto.commit (bool) 如果為True,將自動定時提交消費者offset。預設為True
auto.commit.interval.ms(int) 自動提交offset之間的間隔毫秒數。如果enable_auto_commit為true,預設值為 5000。
觸發brokerlist更新
分割槽機制:Partition機制
Range# 特點 確保每個消費者消費的分割槽數量是均衡的。
partition.assignment.strategy,修改分割槽的分配策略
Event 事件是從RdKafka傳遞錯誤、統計資訊、日誌等訊息到應用程式的通用介面
class ConsumerEventCb : public RdKafka::EventCb
其他
C語言中的多執行緒程式設計:POSIX執行緒庫(Pthreads)
Pthreads為C/C++等基於Unix/Linux系統的程式語言提供了統一、跨平臺的執行緒建立、同步、互斥、排程等介面
執行緒(Thread)
POSIX threads 也稱作為Pthreads,
一個單程序可以包含多個執行緒,多個執行緒共享同樣的全域性記憶體包括全域性變數和堆段,但是每個執行緒有自己的棧存放一些區域性變數
#include "rdkafka.h" #include "rdkafkacpp.h"
pure virtual abstract classes.
純虛類:抽象類abstract class是指至少有一個純虛擬函式的類,如果一個類全部由純虛擬函式組成,不包括任何的實現,被稱為純虛類
純虛擬函式是一種沒有實現體的虛擬函式,它在基類中宣告,並且至少包含一個純虛擬函式的類被稱為抽象類
C++的虛擬函式可以在子類中重寫,呼叫是根據實際的物件來判別的,而不是透過指標型別(普通函式的呼叫是根據當前指標型別來判斷的)
回撥函式
1.回撥函式機制:CallBack
1、定義一個函式(普通函式即可); --#->定義回撥函式
2、將此函式的地址註冊給呼叫者; --#->設定回撥 -註冊回撥函式
3、特定的事件或條件發生時,呼叫者使用函式指標呼叫回撥函式。 --#-> 回撥處理
2.函式指標
是指一個變數,函式物件建立後就會分配一個地址,這個地址可以透過變數進行儲存。
這個變數就叫做函式地址變數,也可以稱之為函式指標
參考
C++實現kafka的生產者客戶端 https://zhuanlan.zhihu.com/p/614462015
docker安裝kafka叢集 https://www.cnblogs.com/aaalei/p/17530193.html
docker啟動kafka並掛載配置檔案,並讓外部環境連線kafka https://blog.csdn.net/q2570558854/article/details/141687742
簡單聊聊C++中回撥函式的實現 https://www.jb51.net/article/235073.htm