经典组件知识(kafka,ngix)

news2025/1/18 20:28:13

消息队列的作用
解耦、削峰、 异步(非必要逻辑异步运行,加快响应速度)

kafka
首先有个topic的概念,类似于表。
Partition 分区:一个topic下面有多个分区,这些分区会存储到不同的服务器上面,或者说,其实就是在不同的主机上建了不同的目录。多个分区多个线程,多个线程并行处理肯定会比单线程好得多。Topic 也是逻辑概念,而 Partition 就是分布式存储单元。

在这里插入图片描述
Replica 副本机制:Partition 为了保证数据安全,所以每个 Partition 可以设置多个副本。
而且其实每个副本都是有角色之分的,它们会选取一个副本作为 Leader,而其余的作为 Follower。

我们的生产者在发送数据的时候,是直接发送到 Leader Partition 里面,然后 Follower Partition 会去 Leader 那里自行同步数据,消费者消费数据的时候,也是从 Leader 那去消费数据的。

Consumer Group 消费者组:
我们在消费数据时会在代码里面指定一个 group.id,这个 id 代表的是消费组的名字。不同组可有唯一的一个消费者去消费同一主题的数据。

Kafka 也是主从式的架构,主节点就叫 Controller,其余的为从节点,Controller 是需要和 Zookeeper 进行配合管理整个 Kafka 集群。
broker分布式部署,就需要一个注册中心来进行统一管理。Zookeeper用一个专门节点保存Broker服务列表,也就是 /brokers/ids。broker在启动时,向Zookeeper发送注册请求,Zookeeper会在/brokers/ids下创建这个broker节点,如/brokers/ids/[0…N],并保存broker的IP地址和端口。
这个节点临时节点,一旦broker宕机,这个临时节点会被自动删除。
Zookeeper也会为topic分配一个单独节点,每个topic都会以/**brokers/topics/[topic_name]**的形式记录在Zookeeper。一个topic的消息会被保存到多个partition,这些partition跟broker的对应关系也需要保存Zookeeper。当分区的leader故障转移也需要zookeeper参与。
消费者组也会向Zookeeper进行注册,Zookeeper会为其分配节点来保存相关数据,节点路径为/consumers/{group_id}
Controller的选举工作依赖于Zookeeper,选举成功后,Zookeeper会创建一个/controller临时节点。

控制器用来监听分区变化(元数据变化,Leader故障,增减分区)、topic变化、broker变化。

kafka缺点就是:需要同时部署两个系统。而且分区增加时,Zookeeper集群压力变大,达到一定级别后,监听延迟增加,给Kafaka的工作带来了影响。并且单个控制节点如果节点故障,新的Controller选举成功后,会重新从Zookeeper拉取元数据进行初始化,并且需要通知其他所有的broker更新ActiveControllerId。老的Controller需要关闭监听、事件处理线程和定时任务。分区数非常多时,这个过程非常耗时,而且这个过程中Kafka集群是不能工作的。
(有新的采用多个控制节点,用raft协议保证他们的一致性)

Kafka 性能好在什么地方?

1、磁盘顺序写。随机写的话是在文件的某个位置修改数据,性能会较低。

2、零拷贝技术。下面是非零拷贝,数据要从内核状态拷贝到kafka进程空间,再拷贝到socket的缓存。耗时比较高。
Kafka 利用了 Linux 的 sendFile 技术(NIO),省去了进程切换和一次数据拷贝,让性能变得更好。内核的数据直接发送到网卡了。

零拷贝技术要多说一点。C++的vector也涉及到零拷贝,比如emplace_back是零拷贝,因为不用拷贝一个临时对象,采用的是右值引用?尤其是当涉及到很大的数据拷贝非常消耗时空资源

而这里网络中的零拷贝:
传统的:read首先DMA从磁盘拷贝到内核页缓存,再拷贝到用户空间。write先从用户拷贝到socket内核缓存,再拷贝到网卡;
mmap:零拷贝的一种。主要思想是把内核空间和用户态共享,就不用拷贝到用户态,上下文切换。
sendfile:Linux2.1内核开始引入了sendfile函数,用于将文件通过socket传送。主要优化是在内核socket缓冲区中记录当前要发生的数据在page buffer中的位置和偏移量。这样直接从page buf就可以发到网卡,没有拷贝的过程。
在这里插入图片描述

3、日志分段存储 Kafka 规定了一个分区内的 .log 文件最大为 1G,做这个限制目的是为了方便把 .log 加载到内存去操作。 其实redis对于主从复制时RDB文件的大小也会有限制,不然加载到内存很慢。

4、Kafka 的网络设计
在这里插入图片描述

加强版的 Reactor 网络线程模型。是一个三层的设计 prosessors-qequest-线程池。
acceptor不进行处理而是封装成channel给processors。然后消费者线程去消费这些 socketChannel 时,会获取一个个 Request 请求,里面包含了数据,然后线程池来读取。
所以如果我们需要对 Kafka 进行增强调优,增加 Processor 并增加线程池里面的处理线程,就可以达到效果。

ngix

是一个http代理和反向代理的web服务器,内存少15MB启动快高并发。还可以实现负载均衡和动静分离
应用场景:
1、做http服务器,静态的网站,例如说:我们使用的OpenVPN。
2、反向代理实现负载均衡。当网站的访问量达到一定程度后,单台服务器不能满足用户的请求时,需要用多台服务器集群可以使用nginx做反向代理,并且多台服务器可以平均分担负载。它会让客户端感觉不到,依然输入原来的网址。
3、安全配置防火墙功能

处理请求的流程
启动时读取配置文件得到需要监听的ip,port。然后主进程会创建好套接字(socket,bind,listen)
然后fork出很多子进程,竞争accept新的连接,这个时候客户端就可以和ngix建立三次握手了。某一个子进程会 accept 成功,得到这个建立好的连接的 Socket ,然后创建 nginx 对连接的封装
接着,设置读写事件处理函数,并添加读写事件来与客户端进行数据的交换。最后,Nginx 或客户端来主动关掉连接,到此,一个连接就寿终正寝了

高并发的原因:因为webserver是IO密集型的,主要是网络IO。所以也是用到了IO复用+异步非阻塞IO

也是用到了单线程+epoll和redis一样。

动静分离根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路
严格意义上,可以理解成使用nginx处理静态页面,tomcat或PHP处理动态页面。静态资源就是多次访问,源代码不变的(CSS,jpg、js)动态资源:当用户多次访问这个资源,资源的源代码可能会发送改变。

当然,因为现在七牛、阿里云等 CDN 服务已经很成熟,主流的做法,是把静态资源缓存到 CDN 服务中,从而提升访问速度。
相比本地的 Nginx 来说,CDN 服务器由于在国内有更多的节点,可以实现用户的就近访问。并且,CDN 服务可以提供更大的带宽,不像我们自己的应用服务,提供的带宽是有限的。

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

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

相关文章

如何使用 Django 进行测试驱动开发,我来告诉你

所谓测试驱动开发(TDD),就是先编写测试用例,然后编写代码来满足测试用例,具体包含以下步骤: 编写测试用例。编写代码满足测试用例中的需求。运行测试用例。如果通过,说明代码满足了测试用例所定义的需求。如果未通过&…

armday2

.text .global _start _start: bl LED1_INITbl LED1_ONbl delay_1sbl LED1_OFFbl LED2_INITbl LED2_ONbl delay_1sbl LED2_OFFbl LED3_INITbl LED3_ONbl delay_1sbl LED3_OFFbl _start/**********LED1点灯PE10**************/ LED1_INIT:1.通过RCC_HB4_ENSETR寄存器设置GPIOE组…

PoseiSwap:为何青睐 Layer3?又为何选择 Celestia 作为技术伙伴?

自 PoseiSwap 在 Nautilus Chain 上线后,该 DEX 的整体市场进展十分顺利。我们看到,其不仅在 4 月,以 1000万美元的估值, 获得了来自于 Zebec Labs 的首轮 150 万美元的融资。而在本月,在 Zebec 生态的帮助下&#xff…

利用prusa 3d打印地形模型 如何合理切片并提高打印速度

如上图,我们选择打印一个宽10cm 的地形模型,通过prusa切片,显示时间为22小时31分钟。这个速度大概一天,确实不是我们要的速度,如何提高速度又不失去打印细节且不增加失败风险呢。 1.减少填充 10%的填充对于创想三维en…

RK3568平台开发系列讲解(驱动基础篇)RK平台UART的使用

🚀返回专栏总目录 文章目录 一、引脚定义1.1 UART91.2 RS232和RS485二、设备树配置三、调试3.1 连接硬件3.2 打开主机的串口终端3.3 板子发送数据3.4 板子接收数据3.5 主机退出kermit串口连接四、UART2普通串口配置沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇…

C++——模板初阶

文章目录 一.泛型编程二.函数模板1.函数模板的概念2.函数模板的格式3.函数模板的原理4.函数模板的实例化(1)隐式实例化(2)显式实例化 5.模板参数的匹配原 三.类模板1.类模板的定义格式2.类模板的实例化 前言: 本章我们…

Flutter问题记录 - Text组件设置不限行数无效

文章目录 前言开发环境问题描述问题分析解决方案最后 前言 梳理Flutter项目的过程中发现还有一些遗留的TODO没处理,其中有一个和Text组件相关。 开发环境 Flutter: 3.7.12Dart: 2.19.6 问题描述 Text组件设置maxLines: null不限制行数: Text(The […

gradio入门示例

随着chat-gpt等机器人对话框架的流行,让一个名为gradio的框架也火热起来,这个框架可以开启一个http服务,并且带输入输出界面,可以让对话类的人工智能项目快速运行。 gradio号称可以快速部署ai可视化项目。 下面通过两个示例来感受…

C++学习记录——이십사 位图、布隆过滤器、哈希切割

文章目录 1、位图位图应用优缺点 2、布隆过滤器1、哈希函数2、删除 3、哈希切割应用 本篇gitee 1、位图 先看一个题目: 给40亿个不重复的无符号整数,没排过序。给一个无符号整数,如何快速判断一个树是否在这40亿个数中? 这里可能…

《面试1v1》线程池

我是 javapub,一名 Markdown 程序员从👨‍💻,八股文种子选手。 面试官: 你好,很高兴见到你。请问你对线程池有什么了解? 候选人: 你好,我对线程池非常了解。线程池是一种…

前后端联调统一校验规则

文章目录 统一校验实现1.什么是统一校验2.统一校验的实现(1)引入依赖(2)基于注解(3)使用案例【1】定义校验规则【2】开启校验【3】统一异常处理器捕获校验产生的异常 3.分组校验(1)定义公共的校验分组(2)定…

完全自主研发,聚芯微发布3D dToF图像传感器芯片!

日前,由中国半导体行业协会IC设计分会(ICCAD)、芯原股份、松山湖管委会主办的主题为“AR/VR/XR元宇宙”的“2023松山湖中国IC创新高峰论坛”正式在广东东莞松山湖召开。武汉市聚芯微电子有限责任公司发布了完全自主知识产权的3D dToF图像传感…

Spring面试整理

什么是Spring? Spring的优缺点? Spring的模块组成 Spring框架中使用了哪些设计模式? 详细讲解下核心容器(Spring context)模块 Spring框架中有哪些不同类型的组件 Spring控制反转(IOC) 什…

由浅入深Dubbo核心源码剖析SPI机制

目录 1 SPI的概述1.1 SPI的主要作用1.2 入门案例1.3 总结 2 Dubbo中的SPI2.1 概述2.2 入门案例2.3 源码分析 3 SPI中的IOC和AOP3.1 依赖注入3.2 动态增强 4 动态编译4.1 SPI中的自适应4.2 javassist入门4.3 源码分析 1 SPI的概述 在 Dubbo 中,SPI 是一个非常重要的模…

Spring Boot 3.x 系列【35】服务监控 | 健康信息

有道无术,术尚可求,有术无道,止于术。 本系列Spring Boot版本3.0.5 源码地址:https://gitee.com/pearl-organization/study-spring-boot3 文章目录 1. 配置2. 基本原理3. 自动配置4. 自定义健康指标5. 分组6. 数据源1. 配置 Health是健康的意思,该端点用来检查正在运行…

XDP入门--BPF程序如何转发报文到其它网卡

本文目录 1、测试环境:2、实现的功能,使用bpf_redirect直接转发收到的报文到另外一张网卡3、测试步骤与测试结果 1、测试环境: 参照把树莓派改造成无线网卡(3)-----共享无线网络,无线网络转换成有线网络,让有线网络设…

从零实现一个数据库(DataBase) Go语言实现版 3.B树: 思路

英文源地址 关于B树和二叉查找树的直觉 我们的第一个直觉来自于平衡二叉树(BST).二叉树是用于排序数据的常用数据结构.在插入或移除键后保持树的良好形状就是’平衡’的意思.如前一章所述, 为了利用"页"(IO的最小单元), 应该使用n叉树而不是二叉树. b树可以由二叉查…

有哪些值得推荐的科研检索平台?

有哪些值得推荐的检索和笔记平台? 有哪些值得推荐的检索平台?文献检索,调研的推荐1. arXiv相关信息介绍推荐功能及用法 2. Web of Science相关信息介绍推荐功能及用法 3. Google Scholar相关信息介绍推荐功能及用法 4. Sci-Hub相关信息介绍 5…

Mybatis中动态sql的使用

文章目录 1. if 标签2.choose、when、otherwise3. trim、where、set4. foreach 动态 SQL 是 MyBatis 的强大特性之一,使用动态 SQL 并非一件易事,但借助可用于任何 SQL 映射语句中的强大的动态 SQL 语言,MyBatis 显著地提升了这一特性的易用性。Mbatis-P…

SaaS企业应该如何建立稳固的客户关系?

近年来,“客户成功”一词越来越热,这主要是由于当下企业正面临人口红利触顶、获客成本高昂、用户转化率低下、企业业绩增长受阻等问题,所以更多的企业开始将重心转移到对老客户的维护上,这也使得客户成功团队在企业中发挥的作用越…