使用etcdctl还原数据时,需要使用ca.crt、server.crt、server.key还原,集群会对证书加密的数据进行验证操作。一但证书被替换则无法通过验证。
kubernetes集群机器泡水,新搭建的ETCD证书重新创建了,剩下的备份文件也没有用,无法进行还原操作。
CPU是十项全能,GPU是偏科的天才。
教授 vs 小学生
你可以简单的将CPU理解为学识渊博的教授,什么都精通,而GPU则是一堆小学生,只会简单的算数运算,可即使教授再神通广大,也不能一秒钟内计算出500次加减法,因此对简单重复的计算来说单单一个教授敌不过数量众多的小学生,在进行简单的算数运算这件事上,500个小学生(并发)可以轻而易举打败教授。
因此我们可以看到,CPU和GPU的最大不同在于架构,CPU适用于广泛的应用场景(学识渊博),可以执行任意程序,而GPU则专为多任务而生,并发能力强,具体来讲就是多核,一般的CPU有2核、4核、8核等,而GPU则可能会有成百上千核:
可以看到,CPU内部cache以及控制部分占据了很大一部分片上面积,因此计算单元占比很少,再来看看GPU,GPU只有很简单的控制单元,剩下的大部分都被计算单元占据,因此CPU的核数有限,而GPU则轻松堆出上千核:
只不过CPU中每个核的能力好比教授,而GPU的每个核的能力好比一个小学生,关于CPU你可以参考这里:
你可能会想,为什么GPU需要这么奇怪的架构呢?
为什么GPU需要这么多核心?
想一想计算机上的一张图是怎么表示的?无非就是屏幕上的一个个像素:
我们需要为每个像素进行计算,而且是相同的运算,就好比刚才例子中的小学生计算计加法一样,注意,对于屏幕来说一般会有上百万个像素,如果我们要串行的为每一个像素进行运算效率就太低了,因此我们可以让GPU中的每一个核心去为相应的像素进行计算,由于GPU中有很多核心,因此并行计算可以大幅提高速度。
现在你应该明白为什么GPU要这样工作了吧。
除了GPU的核心数比较多之外,GPU的工作方式也比较奇怪。
奇怪的工作方式
对CPU来说,不同的核心可以执行不同的机器指令,coreA在运行word线程的同时coreB上可以运行浏览器线程,这就是所谓的多指令多数据,MIMD,(Multiple Instruction, Multiple Data)。
而GPU则不同,GPU上的这些核心必须整齐划一的运行相同的机器指令,只是可以操作不同的数据,这就好比这些小学生在某个时刻必须都进行加法计算,不同的地方在于有的小学生可能需要计算1+1,有的要计算2+6等等,变化的地方仅在于操作数,这就是所谓的单指令多数据,SIMD,(Single Instruction, Multiple Data)。
因此我们可以看到GPU的工作方式和CPU是截然不同的。
除了这种工作方式之外,GPU的指令集还非常简单,不像CPU这种复杂的处理器,如果你去看CPU的编程手册就会发现,CPU负责的事情非常多:中断处理、内存管理、IO等等,这些对于GPU来说都是不存在的,可以看到GPU的定位非常简单,就是纯计算,GPU绝不是用来取代CPU的,CPU只是把一些GPU非常擅长的事情交给它,GPU仅仅是用来分担CPU工作的配角。
CPU和GPU是这样配合工作的:
GPU擅长什么比较适合GPU的计算场景是这样的:
因此如果你的计算场景和这里的图像渲染相似那么使用GPU就很合理了。因此对于图形图像计算、天气预报以及神经网络等都适用于GPU,嗯,GPU还适合用来挖矿。
CPU 力气大啥P事都能干,还要协调。
GPU 上面那家伙的小弟,老大让他处理图形,这方面处理简单,但是量大,老大虽然能处理,可是老大只有那么几个兄弟,所以不如交给小弟处理了,小弟兄弟多,有数百至数千个,而且是专门只干这行和只能干这行。
你可以很轻松地清理。
可以通过以下方式列出所有已完成的pod:
kubectl get pod --field-selector=status.phase==Succeeded
并通过以下方式删除所有已完成的pod:
kubectl delete pod --field-selector=status.phase==Succeeded
在 Kubernetes 中,CPU 资源以毫核或 milliCPU 为单位衡量,它表示 CPU 核的千分之一。例如,如果一个容器请求 500m(或 0.5)CPU,它意味着它需要半个 CPU 核。同样地,如果一个容器请求 1000m(或 1)CPU,它意味着它需要一个完整的 CPU 核。
毫核单位用于将 CPU 资源分配给运行在节点上的容器,它允许对每个容器使用的 CPU 进行细粒度的控制。当一个容器请求 CPU 资源时,Kubernetes 将调度容器在有可用 CPU 资源的节点上运行,并将限制容器的 CPU 使用量到所请求的数量。
值得注意的是,Kubernetes 中的 CPU 资源并不等同于节点上的物理 CPU。Kubernetes 使用 CPU 调度程序来管理节点上运行的所有容器的 CPU 资源,它可以根据容器的使用模式和资源请求动态地分配 CPU 资源给容器。
1核 = 1000毫核(m)
1毫核 = 1000微核(μ)
1微核 = 1000纳核(n)
//设置提交偏移量的方式, MANUAL_IMMEDIATE 表示消费一条提交一次;MANUAL表示批量提交一次
factory.getContainerProperties().setAckMode((ContainerProperties.AckMode.MANUAL_IMMEDIATE));
MANUAL_IMMEDIATE 这个提交的方式虽然是消费一次提交一次 但是kafka每一批都会拉取max.poll.records(默认500条数据) 比如说在消费第300条数据是手动提交的时候 (1-300条数据)消费的总时长超过了max.poll.interval.ms 就会被踢出消费者组
问题解决了。但是原因具体原因不能确定。如果有相同情况,可以按照这个思路排查看看。
我们服务器是arm架构,但是jdk没有使用arm架构的,替换了jdk版本后文件正常删除了。
改了之后:虽然钉钉还会在网络波动的时候报警,因为数据从生产到目标topic大概会用1分钟时间。但是再也没有重复消费情况了。感谢!
啊,不知道理解的对不对?:
第一个代码是:病人是对象,注射类型、是否注射、病人都是其属性。显然这些东西作为病人的属性是不“面向对象的”。就比如我们不能说猫是狗的对象,只能说狗有个属性是玩,把对象猫给它,它就能玩了。
第二个代码是:病人是对象,他有个方法是注射疫苗,直接调方法就能实现功能。但是细节未知。
第三个代码是:病人、护士、疫苗都是不同对象,先选出疫苗类型,护士可以做的事是打标准疫苗,只要将疫苗和病人给护士,护士就能完成这个事情。
消费者是批量拉取消息,也就是说在你停止项目的时候,如果此时刚拉取了消息,提交offsr,但程序只处理一部分,那剩下的消息就会漏掉。