k8s1.28-helm安装kafka-Raft集群

参考文档

[Raft Kafka on k8s 部署实战操作 - 掘金 (juejin.cn)](https://juejin.cn/post/7349437605857411083?from=search-suggest)

部署 Raft Kafka(Kafka 3.3.1 及以上版本引入的 KRaft 模式)在 Kubernetes (k8s) 上,可以简化 Kafka 集群的管理,因为它不再依赖于 Zookeeper
image.png

集群测试参考文档

[Helm实践---安装kafka集群 - 知乎 (zhihu.com)](https://zhuanlan.zhihu.com/p/642515749)

部署 Raft Kafka 集群的基本步骤

1)准备 Kubernetes 集群

确保你有一个运行中的 Kubernetes 集群,并且已经配置了 kubectl 命令行工具。 部署教程如下:

创建storageclass做动态存储
(1)创建ServiceAccount、ClusterRole、ClusterRoleBinding等,为nfs-client-provisioner授权
# rbac.yaml
apiVersion: v1
kind: ServiceAccount
metadata:
  name: nfs-client-provisioner
  # replace with namespace where provisioner is deployed
  namespace: default
---
kind: ClusterRole
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: nfs-client-provisioner-runner
rules:
  - apiGroups: [""]
    resources: ["persistentvolumes"]
    verbs: ["get", "list", "watch", "create", "delete"]
  - apiGroups: [""]
    resources: ["persistentvolumeclaims"]
    verbs: ["get", "list", "watch", "update"]
  - apiGroups: ["storage.k8s.io"]
    resources: ["storageclasses"]
    verbs: ["get", "list", "watch"]
  - apiGroups: [""]
    resources: ["events"]
    verbs: ["create", "update", "patch"]
---
kind: ClusterRoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: run-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: ClusterRole
  name: nfs-client-provisioner-runner
  apiGroup: rbac.authorization.k8s.io
---
kind: Role
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
    # replace with namespace where provisioner is deployed
  namespace: default
rules:
  - apiGroups: [""]
    resources: ["endpoints"]
    verbs: ["get", "list", "watch", "create", "update", "patch"]
---
kind: RoleBinding
apiVersion: rbac.authorization.k8s.io/v1
metadata:
  name: leader-locking-nfs-client-provisioner
subjects:
  - kind: ServiceAccount
    name: nfs-client-provisioner
    # replace with namespace where provisioner is deployed
    namespace: default
roleRef:
  kind: Role
  name: leader-locking-nfs-client-provisioner
  apiGroup: rbac.authorization.k8s.io

(2)部署nfs-client-provisioner

vim 02-nfs-provisioner.yaml

nfs-client-provisioner 是一个 Kubernetes 的简易 NFS 的外部 provisioner,本身不提供 NFS,需要现有的 NFS 服务器提供存储。
注意:地址和目录要改成实际的NFS服务对应配置

apiVersion: apps/v1

kind: Deployment

metadata:

  name: nfs-client-provisioner

  labels:

    app: nfs-client-provisioner

  # replace with namespace where provisioner is deployed

  namespace: default  #与RBAC文件中的namespace保持一致

spec:

  replicas: 1

  selector:

    matchLabels:

      app: nfs-client-provisioner

  strategy:

    type: Recreate

  selector:

    matchLabels:

      app: nfs-client-provisioner

  template:

    metadata:

      labels:

        app: nfs-client-provisioner

    spec:

      serviceAccountName: nfs-client-provisioner

      containers:

        - name: nfs-client-provisioner

          #image: quay.io/external_storage/nfs-client-provisioner:latest

          #这里特别注意,在k8s-1.20以后版本中使用上面提供的包,并不好用,这里我折腾了好久,才解决,后来在官方的github上,别人提的问题中建议使用下面这个包才解决的,我这里是下载后,传到我自已的仓库里

          image: gmoney23/nfs-client-provisioner:latest

          # image: easzlab/nfs-subdir-external-provisioner:v4.0.1

          # image: registry-op.test.cn/nfs-subdir-external-provisioner:v4.0.1

          volumeMounts:

            - name: nfs-client-root

              mountPath: /persistentvolumes

          env:

            - name: PROVISIONER_NAME

              value: kafka-nfs-storage  #provisioner名称,请确保该名称与 nfs-StorageClass.yaml文件中的provisioner名称保持一致

            - name: NFS_SERVER

              value:    #NFS Server IP地址

            - name: NFS_PATH

              value: "/data/kafka"    #NFS挂载卷

      volumes:

        - name: nfs-client-root

          nfs:

            server:   #NFS Server IP地址

            path: "/data/kafka"     #NFS 挂载卷

      # imagePullSecrets:

      # - name: registry-op.test.cn
部署
kubectl apply -f rbac.yaml 
kubectl apply -f nfs-provisioner.yaml 
kubectl get pod 
NAME                                     READY   STATUS    RESTARTS   AGE
nfs-client-provisioner-888d748c6-7c8hh   1/1     Running   0          4m24s
三、创建StorageClass

/root/test/storageclass-kafka

apiVersion: storage.k8s.io/v1

kind: StorageClass

metadata:

  name: nfs-storageclass

provisioner: kafka-nfs-storage #这里的名称要和provisioner配置文件中的环境变量PROVISIONER_NAME保持一致

parameters:

#  archiveOnDelete: "false"

  archiveOnDelete: "true"

reclaimPolicy: Retain

image.png

安装 helm

下载地址:github.com/helm/helm/r…

# 下载包
wget https://get.helm.sh/helm-v3.9.4-linux-amd64.tar.gz
# 解压压缩包
tar -xf helm-v3.9.4-linux-amd64.tar.gz
# 制作软连接
ln -s /opt/helm/linux-amd64/helm /usr/local/bin/helm
# 验证
helm version
helm help

配置 Helm chart

如果你使用 Bitnami 的 Kafka Helm chart,你需要创建一个 values.yaml 文件来配置 Kafka 集群。在该文件中,你可以启用 KRaft 模式并配置其他设置,如认证、端口等。

# 添加下载源
helm repo add bitnami https://charts.bitnami.com/bitnami
# 下载
helm pull bitnami/kafka --version 26.0.0
# 解压
tar -xf kafka-26.0.0.tgz

# 修改配置
vi kafka/values.yaml

#搜索kafka
helm search  repo  kafka   

(3).拉取chart包格式:  
# helm pull 远程仓库chart包名 --version 0.4.3 --untar 
#从远程仓库拉取指定版本的chart包到本地并解压,--untar是解压,不加就是压缩包  
# helm pull 远程仓库chart包名 --untar #从远程仓库拉取最新版本的chart包到本地并解压,--untar是解压,不加就是压缩包

image.png

以下是一个 values.yaml 的示例配置:
先备份模板自带的
image.png

image:
  registry: docker.io
  repository: bitnami/kafka
  tag: 3.7.0-debian-12-r0

listeners:
  client:
    containerPort: 9092
    # 默认是带鉴权的,SASL_PLAINTEXT
    protocol: PLAINTEXT
    name: CLIENT
    sslClientAuth: ""

controller:
  replicaCount: 3 # 控制器的数量
  persistence:
  storageClass: "kafka-controller-local-storage"
  size: "10Gi"
  # 目录需要提前在宿主机上创建
  local:
    - name: kafka-controller-0
      host: "local-168-182-110"
      path: "/opt/bigdata/servers/kraft/kafka-controller/data1"
    - name: kafka-controller-1
      host: "local-168-182-111"
      path: "/opt/bigdata/servers/kraft/kafka-controller/data1"
    - name: kafka-controller-2
      host: "local-168-182-112"
      path: "/opt/bigdata/servers/kraft/kafka-controller/data1"

broker:
  replicaCount: 3  # 代理的数量
  persistence:
  storageClass: "kafka-broker-local-storage"
  size: "10Gi"
  # 目录需要提前在宿主机上创建
  local:
    - name: kafka-broker-0
      host: "local-168-182-110"
      path: "/opt/bigdata/servers/kraft/kafka-broker/data1"
    - name: kafka-broker-1
      host: "local-168-182-111"
      path: "/opt/bigdata/servers/kraft/kafka-broker/data1"
    - name: kafka-broker-2
      host: "local-168-182-112"
      path: "/opt/bigdata/servers/kraft/kafka-broker/data1"

service:
  type: NodePort
  nodePorts:
    #NodePort 默认范围是 30000-32767
    client: "32181"
    tls: "32182"

# Enable Prometheus to access ZooKeeper metrics endpoint
metrics:
  enabled: true
kraft:
  enabled: true

重点修改地方
1
image.png

2
image.png

添加以下几个文件:
kafka/templates/broker/pv.yaml
{{- range .Values.broker.persistence.local }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: {{ .name }}
  labels:
    name: {{ .name }}
spec:
  storageClassName: {{ $.Values.broker.persistence.storageClass }}
  capacity:
    storage: {{ $.Values.broker.persistence.size }}
  accessModes:
    - ReadWriteOnce
  local:
    path: {{ .path }}
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - {{ .host }}
---
{{- end }}

  • kafka/templates/broker/storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: {{ .Values.broker.persistence.storageClass }}
provisioner: kubernetes.io/no-provisioner

  • kafka/templates/controller-eligible/pv.yaml
{{- range .Values.controller.persistence.local }}
---
apiVersion: v1
kind: PersistentVolume
metadata:
  name: {{ .name }}
  labels:
    name: {{ .name }}
spec:
  storageClassName: {{ $.Values.controller.persistence.storageClass }}
  capacity:
    storage: {{ $.Values.controller.persistence.size }}
  accessModes:
    - ReadWriteOnce
  local:
    path: {{ .path }}
  nodeAffinity:
    required:
      nodeSelectorTerms:
        - matchExpressions:
            - key: kubernetes.io/hostname
              operator: In
              values:
                - {{ .host }}
---
{{- end }}

  • kafka/templates/controller-eligible/storage-class.yaml
kind: StorageClass
apiVersion: storage.k8s.io/v1
metadata:
  name: {{ .Values.controller.persistence.storageClass }}
provisioner: kubernetes.io/no-provisioner

宿主机准备工作

image.png

4使用 Helm 部署 Kafka 集群

# 先准备好镜像
docker pull docker.io/bitnami/kafka:3.6.0-debian-11-r0
docker tag docker.io/bitnami/kafka:3.6.0-debian-11-r0 registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/kafka:3.6.0-debian-11-r0
docker push registry.cn-hangzhou.aliyuncs.com/bigdata_cloudnative/kafka:3.6.0-debian-11-r0

# 开始安装
$ kubectl create namespace kafka
$ helm install -f values.yaml kafka bitnami/kafka --namespace kafka

image.png

image.png

查看运行的pod
image.png

部署单节点集群
  • 下面这个案例关闭了持久化存储,仅演示部署效果
 helm upgrade --install kafka \
  --namespace kafka-demo \
  --create-namespace \
  --set broker.combinedMode.enabled="true" \
  --set broker.persistence.enabled="false" \
  bitnami/kafka

Controller 与 Broker 分离部署
  helm upgrade --install kafka \

  --namespace kafka-demo \

  --create-namespace \

  --set broker.persistence.size="20Gi" \

  bitnami/kafka

默认已开启持久化存储。

获取ip和port
方式一:

其实安装kafka安装好之后输出的信息里面就有打印ip,关键是这个ip是我们自己定义的,所以我们事前也是知道的

方式二:当然你也可以通过下面命令获取

获取IP地址:

kubectl get nodes --namespace kafka -o jsonpath="{.items[0].status.addresses[0].address}"

获取端口:

方式一:

kubectl get --namespace kafka -o jsonpath="{.spec.ports[0].nodePort}" services kafka

方式二:

echo "$(kubectl get svc --namespace kafka -l "app.kubernetes.io/name=kafka,app.kubernetes.io/instance=kafka,app.kubernetes.io/component=kafka,pod" -o jsonpath='{.items[*].spec.ports[0].nodePort}' | tr ' ' '\n')"

获取取ip和port之后,我们通过配置springcloud stream即可创建新连接,如下所示:

kafka集群测试

这里通过两种方式测试下kafka集群,区别只是一个是新起一个容器进行测试,另一个则是在原来的基础进行测试:

3.1 方式一

新起一个容器

1.运行一个kafka-client,用于连接kafka集群
# 创建客户端
kubectl run kraft-kafka-client --restart='Never' --image docker.io/bitnami/kafka:3.7.0-debian-12-r0 --namespace kafka --command -- sleep infinity
kubectl run kraft-kafka-client --restart='Never' \
  --image docker.io/bitnami/kafka:3.7.0-debian-12-r0 \
  --namespace kafka --command -- sleep infinity
上面参数说明:
- `kubectl run kafka-client`: 
  使用 `kubectl` 命令创建一个名为 `kafka-client` 的 Pod
- `--restart='Never'`: 
  设置 Pod 的重启策略为 "Never",这意味着 Pod 不会自动重启
- `--image registry.cn-hangzhou.aliyuncs.com/abroad_images/kafka:3.5.0-debian-11-r1`: 
  指定要在 Pod 中使用的容器镜像。这里使用的是 `registry.cn-hangzhou.aliyuncs.com/abroad_images/kafka:3.5.0-debian-11-r1` 镜像
- `--namespace public-service`: 
  指定要在名为 `public-service` 的命名空间中创建 Pod
- `--command -- sleep infinity`: 
  在容器中执行命令 `sleep infinity`,以保持 Pod 持续运行。`--command` 表示后面的内容是一个命令而不是一个参数,`sleep infinity` 是一个常用的命令,使得容器无限期地休眠
查看pod,已成功建立

image.png

2.在k8s-master01节点上开启两个窗口,一个用于生产者,一个用作消费者。

(1)生产者窗口

进入kafka创建一个名为test的topic,出现>代表成功

2.1方式一
[root@k8s-master01 kafka]#  kubectl exec -it  kraft-kafka-client  -n  kafka -- /bin/bash
I have no name!@kafka-client:/$ cd /opt/bitnami/kafka/bin
I have no name!@kafka-client:/opt/bitnami/kafka/bin$ kafka-console-producer.sh --broker-list kafka-broker-0.kafka-broker-headless.kafka.svc.cluster.local:9092,kafka-broker-1.kafka-broker-headless.kafka.svc.cluster.local:9092,kafka-broker-2.kafka-broker-headless.kafka.svc.cluster.local:9092 --topic test
>
kafka-console-producer.sh --broker-list \
  kafka-broker-0.kafka-broker-headless.kafka.svc.cluster.local:9092,\
  kafka-broker-1.kafka-broker-headless.kafka.svc.cluster.local:9092,\
  kafka-broker-2.kafka-broker-headless.kafka.svc.cluster.local:9092 \
  --topic test

上面参数说明:
- `kafka-console-producer.sh`:用于创建生产者  
- `--broker-list kafka-0.kafka-headless.public-service.svc.cluster.local:9092,kafka-1.kafka-headless.public-service.svc.cluster.local:9092,kafka-2.kafka-headless.public-service.svc.cluster.local:9092`:指定要连接的 Kafka Broker 列表。使用逗号分隔多个 Broker 的地址。在这里,指定了三个 Kafka Broker 的地址  
- `--topic test`:指定要发布消息的主题名称,这里使用的是 "test"

image.png

(2)消费者窗口
[root@k8s-master01 kafka]# kubectl exec -it  kafka-client -n  public-service -- bash
I have no name!@kafka-client:/$ cd  /opt/bitnami/kafka/bin/
I have no name!@kafka-client:/opt/bitnami/kafka/bin$ kafka-console-consumer.sh --bootstrap-server kafka.public-service.svc.cluster.local:9092 
上面参数说明:
- `kafka-console-consumer.sh`:
  用于启动消费者
- `--bootstrap-server localhost:9092`:
  指定用于引导连接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主机(localhost)上的 Kafka Broker,并监听 9092 端口
- `--topic test`:
  指定要发布消息的主题名称,这里使用的是 "test"
- `--from-beginning`:
  设置消费者从主题的开始处开始消费消息。这意味着消费者将从主题中的最早可用消息开始消费
- 3.开始测试,观察到消费正常

(1)生产者窗口

>test2 
>test1

(2)消费者窗口

test2 
test1
2.2 方式二
1.进入kafka创建一个名为testtopic的topic
kubectl exec -it kafka-0 -n public-service -- bash

cd /opt/bitnami/kafka/bin

kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic testtopic

Created topic testtopic.

image.png

上面参数说明:
- `--create`:指示 `kafka-topics.sh` 命令创建一个新的主题
- `kafka-topics.sh`:用于创建topic
- `--bootstrap-server localhost:9092`:指定用于引导连接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主机(localhost)上的 Kafka Broker,并监听 9092 端口
- `--replication-factor 1`:设置主题的副本因子(replication factor),指定每个分区的副本数量。
- `--partitions 1`:设置主题的分区数,指定要创建的分区数量
- `--topic testtopic`:指定要创建的主题的名称,这里使用的是 "testtopic"
2.启动消费者
kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic
上面参数说明:
- `kafka-console-consumer.sh`:用于创建消费者
- `--bootstrap-server localhost:9092`:指定用于引导连接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主机(localhost)上的 Kafka Broker,并监听 9092 端口
3.新起一个窗口后,进入kafka,启动一个生产者后,输出hello字段
[root@k8s-master01 kafka]# kubectl exec -it kafka-0 -n public-service -- bash

I have no name!@kafka-0:/$ kafka-console-producer.sh --bootstrap-server localhost:9092 --topic testtopic
>hello

image.png

上面参数说明:
- `kafka-console-consumer.sh`:用于创建生产者
- `--bootstrap-server localhost:9092`:指定用于引导连接到 Kafka 集群的 Kafka Broker 的地址。使用的是本地主机(localhost)上的 Kafka Broker,并监听 9092 端口
4.在消费者窗口上进行查看,观察到消费正常
I have no name!@kafka-broker-0:/opt/bitnami/kafka/bin$ kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic testtopic

hello

image.png

四、kafka集群扩容

关于kafka集群扩容,这里介绍两种方式:一种是修改副本数进行扩容,另一种是使用helm upgrade进行扩容

4.1 方式一

1.修改values.yaml相应配置,搜索replicaCount,将副本数修改为5
[root@k8s-master01 ~]# cd /root/kafka

[root@k8s-master01 kafka]# vim values.yaml

image.png

2.开始扩容
[root@k8s-master01 ~]# cd /root/kafka
[root@k8s-master01 kafka]#  helm upgrade -n public-service kafka .

3.查看pod建立情况,观察到已经成功扩容

4.2 方式二

其实这种方式只针对命令行方式安装kafka集群

1.直接使用helm upgrade命令进行扩容
helm upgrade kafka bitnami/kafka --set zookeeper.enabled=false --set replicaCount=3 --set externalZookeeper.servers=zookeeper --set persistence.enabled=false -n public-service

2.查看pod建立情况,观察到已经成功扩容

五、kafka集群删除

1.查看安装的集群
helm list -A

image.png

2.删除kafka集群
helm delete kafka  -n kafka
3. 删除实例
helm uninstall kafka -n kafka
4. 删除Kafka 命名空间下的所有 PVC(持久卷声明)
kubectl delete pvc --all -n kafka

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux编程中进程的概念和环境变量

目录 概述 1 认识进程 1.1 进程的定义 1.2 进程状态 1.3 进程的调用 2 进程环境 2.1 进程ID 2.2 父进程与子进程 2.3 UID 和 GID 2.4 环境变量 2.4.1 通过main函数参数获取环境变量 2.4.2 environ 全局变量获取环境变量 2.4.3 getenv()函数获取环境变量 2.5 环境变…

Ubuntu22.04平台编译完美解决问题“error: GLSL 4.5 is not supported.”【GLSL(OpenGL着色器语言)】

GLSL介绍 GLSL(OpenGL着色器语言)是用于编写OpenGL着色器程序的语言。GLSL 4.5 是 GLSL 的一个版本,引入了许多新的特性和改进,旨在提高着色器编程的灵活性和性能。GLSL 4.5 工具通常是用于编写、调试和优化 GLSL 4.5 着色器代码…

Java基于微信小程序的校园外卖平台系统,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…

怎么将本地VScode与Linux云服务器上的Vscode联动起来

首先我们打开本地刚刚下好的VScode, 下载remote SSH插件 按下F1 找到该选项, 点击 然后输入ssh 用户名公网地址 点击选择第一个 此时你的VScode左侧栏里就会出现这个图标 点进来后就可以看到主机已经加载进来了(如果没有, 关闭VScode重进…

工业4g路由器联网后迅速掉线是什么原因?

工业4G路由器连接上网后迅速掉线可能是由多种因素造成的。以下是一些建议的检查和解决步骤: 1、信号问题: 信号强度:检查工业路由器信号强度指示灯,如果信号弱,尝试移动路由器位置或添加外部天线来增强信号。 网络拥…

绘画尝试1

提示词:Elegant woman, standing in a picturesque courtyard, slender figure, graceful posture, elegant back, smooth neck line, flashing charming eyes. 绘画成果:

机器学习和深度学习

一、定义 机器学习是一种人工智能领域的分支,旨在使计算机系统能够自动从数据中学习和提高性能,而不需要明确的编程。简而言之,机器学习是利用经验来训练计算机系统,使其能够从输入数据中提取规律,并对新数据进行预测…

百度松果菁英班——机器学习实践四:文本词频分析

飞桨AI Studio星河社区-人工智能学习与实训社区 🥪jieba分词词频统计 import jieba # jieba中文分词库 ​ with open(test.txt, r, encodingUTF-8) as novelFile:novel novelFile.read() # print(novel) stopwords [line.strip() for line in open(stop.txt, r,…

mac老版本如何升级到最新版本

mac老版本如何升级到最新版本 老macbook升级新版本(Big sur、Monterey) 首先介绍我的电脑的机型及情况: 2015年初的MacBook Air 处理器是1.6Hz 双核Interl Core i5 内存4G 老版本只能升到10.13 想要升到最高版本的原因:想要注册…

React18从入门到实战

文章目录 一、React环境的搭建二、项目文件的介绍(1)package.json,他是项目存放依赖包的地方,里面包括了一些项目核心包及下载的其他插件包(2)src文件夹是项目源码目录,平时开发页面就在其中&am…

【ArcGIS微课1000例】0108:ArcGIS计算归一化差值植被指数

本文讲解ArcGIS中,基于Landsat8数据的NDVI归一化差值植被指数计算。 文章目录 一、加载数据二、归一化植被指数NDVI1. NDVI介绍2. NDVI计算三、注意事项一、加载数据 加载配套数据0108.rar中的Landsat8的8个单波段数据,如下所示: Landsat8波段信息对照表如下表所示: 接下来…

前端开发语言有那些?

前端开发语言有那些? 1、html 超文本标记语言:构建前端网页的基本结构,就象人的骨架一样。 2、css 层叠样式表:控制网页的样式和布局,就象人需要穿各种服式展现不同风采。 3、javascript 简称 JS 动态脚本语言&#x…

论文笔记:Detecting Pretraining Data from Large Language Models

iclr 2024 reviewer评分 5688 1 intro 论文考虑的问题:给定一段文本和对一个黑盒语言模型的访问权限,在不知道其预训练数据的情况下,能否判断该模型是否在这段文本上进行了预训练 这个问题是成员推断攻击(Membership Inference Attacks&…

SpriingBoot整合MongoDB多数据源

背景&#xff1a; MongoDB多数据源&#xff1a;springboot为3以上版本&#xff0c;spring-boot-starter-data-mongodb低版本MongoDBFactory已过时&#xff0c; 改为MongoDatabaseFactory。 1、pom引入&#xff1a; <dependency><groupId>org.springframework.boo…

axios取消请求,解决接口返回顺序错乱问题

下面的方案适用于系统中的某个请求的取消&#xff0c;项目的请求使用 axios 封装 使用场景&#xff1a;当页面有多个 tab&#xff0c;例如年、月、日的列表数据&#xff0c;当点击切换的时候要获取对应的数据&#xff0c;此时如果快速点击在tab直接反复横跳会出现下面的问题&am…

K8S - Service简介和 1个简单NodePort例子

大纲图 流量方向 如上图&#xff0c; 当用户or 别的service 从k8s 集群外部访问 集群内的services 流量方向有两种 一种是垂直方向&#xff0c; 通过域名 -> Load Balancer -> gateway -> services , 在k8s 一般是通过ingress 来实现&#xff0c; 而ingress 不是本文…

免费https详细教程

简单叙述一下https的定义和实现https的一些基本作用&#xff0c;然后会给到申请SSL证书的方式以及安装部署流程&#xff0c;最终实现网站的https访问。 随着互联网的快速发展&#xff0c;网络安全问题日益凸显。在互联网上传输敏感信息、进行在线交易和共享个人数据时&#xf…

nginx配置实例-负载均衡

目录 一、目的&#xff1a;实现效果 二、准备工作 三、实验部署 3.1修改第二台Tomcat服务器的监听端口为8081 3.2修改完成后&#xff0c;重新启动tomcat8081这台服务器。 3.3在浏览器测试 3.4在两台tomcat里面webapps目录中&#xff0c;创建名称是edu的文件夹&#xff0c…

Vue的学习之旅-part3

Vue的学习之旅-part1 vue的自带指令v-model的修饰符 一般用于input输入框中v-model.numberv-model.trimv-slot 作用域插槽具名插槽插槽-组件数据传递注意点1&#xff1a;注意点2&#xff1a; v-on: 绑定触发事件v-on监听事件的修饰符冒泡&#xff1a; 通过.stop阻止阻止默认行为…

软考118-上午题-【软件工程】-能力成熟度模型

一、考试题型 选择题&#xff08;13题&#xff09; 二、能力成熟度模型CMM 能力成熟度模型CMM的研究目的是&#xff1a;提供一种评价软件承接方能力的方法&#xff0c;同时它可帮助软件组织改进其软件过程。 CMM 将软件过程改进分为以下5个成熟度级别&#xff1a; 1、初始级…