网络资源面经2

news2024/11/15 12:03:38

文章目录

    • Kafka 原理,数据怎么平分到消费者
      • 生产者分区
      • 消费者分区
    • Flume HDFS Sink 小文件处理
    • Flink 与 Spark Streaming 的差异,具体效果
    • Spark 背压机制具体实现原理
    • Yarn 调度策略
    • Spark Streaming消费方式及区别
    • Zookeeper 怎么避免脑裂,什么是脑裂
    • 讲一讲什么是 CAP 法则?Zookeeper 符合了这个法则的哪两个?

Kafka 原理,数据怎么平分到消费者

这里主要考的是kafka的分区分配策略

生产者分区

若指定分区号,则直接发给对应分区;若没有分区号,则通过key的hashcode对分区数取模;若也没有key则采取Sticky策略,会随机选择一分区,尽可能使用该分区,待该分区batch已满或者已提交,再随机选择一个分区,与当前分区不同。

消费者分区

Kafka的分区分配策略

  1. RoundRobin
    针对所有topic的partition的。把消费者组订阅的所有topic的所有partition组成一个topicAndPartition列表,按照topicAndPartition的hashcode排序,对消费者组的所有消费者线程按照字母顺序排序,然后通过轮询将topicAndPartition列表中的每一个分区发给每一个消费者消费。

  2. Range
    是kafka默认分区分配策略。针对每一个topic而言的。首先将分区按分区号排序,然后将消费者按字母顺序排序,单个topic内partition数除以消费者组内的消费者线程数,决定每个消费者线程消费几个分区。如果除不尽前几个消费者会多消费一个分区。
    在这里插入图片描述

  3. Sticky
    基础分配方式与RoundRobin一致,但是在重分配时,Sticky会尽可能保证与原分区策略一致。例如三个消费者中的一个挂了,如果是RoundRobin会对所有存活的消费者消费的分区进行重分配,如果是Sticky,则只将宕机节点分配的分区重分配给存活的消费者。
    在这里插入图片描述

Flume HDFS Sink 小文件处理

源码中如果滚动中的文件如果被监测到正在进行HDFS的副本复制,就会自动产生一个文件,不会等到设置的条件触发再产生文件。源码的判断机制是当前正在复制的块序号是否小于配置文件中读取的最小副本数numBlocks < desiredBlocks。所以要想将这个触发条件关闭,需要使这个不等式恒不成立,我们不能修改hadoop的副本数,而Flume给我们提供了一个参数minBlockReplicas=1,我们只需要将这个参数设为1,就可以实现需求。

Flink 与 Spark Streaming 的差异,具体效果

  1. 流和微批
  2. 时间语义

Spark 背压机制具体实现原理

spark1.5之前,如果用户要限制Receiver的接受速率,只能通过配置参数spark.streaming.receiver.maxRate实现,虽然这样可以控制接受速率,防止OOM,但也会引入其他问题,当数据量小的时候,处理速率高于maxRate,这样就会导致资源利用率下降。所以从1.5开始,spark实现了一个新功能,可以通过动态控制接收速率来适配处理速率,即背压机制(spark.streaming.backpressure.enabled,默认false):根据JobSchedule反馈的执行信息来动态调整Receiver的接收速率。如果数据量稳定或数据量较小,则无需开启背压,因为背压机制也需要消耗计算资源。

Yarn 调度策略

  1. FIFO调度器
    单队列,任务会被放入队列中,先被获取先执行。

  2. 公平调度器
    见面分一半。多队列,不会预分资源。当单任务提交时,若无其他任务运行,则独享所有资源。其他队列有任务时,与其他队列平分资源。当本队列有任务时,与本队列任务平分本队列资源。队列内部也可以设置调度策略公平(默认)或者FIFO
    在这里插入图片描述

  3. 容量调度器
    对资源进行预分,设置A队列执行大任务,B队列执行小任务。大任务一般占用资源较多,A分配80%资源,B分配20%资源。各队列使用FIFO调度。要点:预分队列,预分资源。

Spark Streaming消费方式及区别

  1. Receiver方式
    这种方式使用的是Kafka的高阶API被动的接收Kafka的数据。Spark会启动Executor专门负责接收kafka的数据,并将接收的数据保存在Executor的内存中(当数据量激增时,可能会导致Executor节点的OOM,从而丢失数据)等待计算任务的拉取。这种情况下,如果Spark出错,很可能导致数据丢失,所以Receiver会开启WAL机制,在Receiver接收Kafka的数据时会同时将数据写入hdfs的预写日志中。
  2. Direct方式
    这种方式是Executor主动拉取kafka中的数据。通过周期性访问kafka来获取每个topic+partitoin的最小offset。处理数据的job启动后,就会直接从kafka中获取对应offset范围的数据。

区别:Receiver是使用Kafka高阶API被动的接收Kafka的数据,offset由Kafka维护,采用WAL实现可靠性;Direct是使用Kafka简单API主动拉取由自己维护的offset范围的数据,由Kafka实现可靠性,性能更高。另外设置多个Receiver只能增加获取kafka数据的线程,对处理RDD的线程没有影响,只能通过多个stream进行unio实现。而Direct只需要创建有多个

Zookeeper 怎么避免脑裂,什么是脑裂

脑裂是master-slaves结构中,某个时刻有两个master对外提供服务。例如有俩个机房,一个机房3个zk节点,另一个机房2个zk节点,集群中只有一个master对外提供读写服务。某个时刻两个机房间的连接断开了,每一个机房都选举产生了一个master分别对外提供读写。当两个机房间的连接恢复后,集群又合并到一起去,此时数据该如何合并,数据冲突如何解决等问题出现。这就是脑裂。
zk中避免脑裂的方式是过半选举机制。集群从配置文件中读取到集群总节点数,若选举投票时某个节点的票数大于集群总结点数的一半时,成功选举了,反之继续选举流程。

讲一讲什么是 CAP 法则?Zookeeper 符合了这个法则的哪两个?

CAP原则,又称CAP定理,指的是一个分布式系统中,一致性,可用性,分区容错性三者不可兼得。
一致性(consistency):在分布式系统中的所有数据备份,在同一时刻是否同样的值。
可用性(Available):对任何非失败节点都应该在有限的时间内给出请求的回应。返回结果必须在合理的时间以内,这个合理的时间是根据业务来定的,如果超过业务规定的返回时间这个系统也就不满足可用性
分区容错性(Partition Tolerance):分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性和可用性的服务。

当有数据写入一个多节点集群中时,如果在节点同步时连接断开,那么必然会有节点未同步成功。而此时如果要保证可用性,那么各节点间的数据会不一致,不满足一致性。而如果满足一致性,即停止对外提供服务直到数据同步完成,那么就不满足可用性了。所以一致性和可用性通常是不能同时满足的。
事实上作为分布式系统,分区容错性是必须的,而一致性和可用性是处于对立面的,所以分布式系统一般是采用CP或者AP组合。zookeeper采用的是CP,主要表现在leader选举时不对外提供服务。

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

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

相关文章

用Python自己写一个分词器,python实现分词功能,隐马尔科夫模型预测问题之维特比算法(Viterbi Algorithm)的Python实现

☕️ 本文系列文章汇总&#xff1a; &#xff08;1&#xff09;HMM开篇&#xff1a;基本概念和几个要素 &#xff08;2&#xff09;HMM计算问题&#xff1a;前后向算法 代码实现 &#xff08;3&#xff09;HMM学习问题&#xff1a;Baum-Welch算法 代码实现&#xff08…

【数据结构】关于二叉树你所应该知道的数学秘密

目录 1.什么是二叉树&#xff08;可以跳过 目录跳转&#xff09; 2.特殊的二叉树&#xff08;满二叉树/完全二叉树&#xff09; 2.1 基础知识 2.2 满二叉树 2.3 完全二叉树 3.二叉树的数学奥秘&#xff08;主体&#xff09; 3.1 高度与节点个数 3.2* 度 4.运用二叉树的…

算法拾遗二十五之暴力递归到动态规划五

算法拾遗二十七之暴力递归到动态规划七题目一【数组累加和最小的】题目二什么暴力递归可以继续优化暴力递归和动态规划的关系面试题和动态规划的关系如何找到某个问题的动态规划方式面试中设计暴力递归的原则知道了暴力递归的原则 然后设计常见的四种尝试模型如何分析有没有重复…

力扣-丢失信息的雇员

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1965. 丢失信息的雇员二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.正确示范④提交SQL运行结果5.其他…

SpringBoot高级-Condition相关操作

01-SpringBoot高级-今日内容 SpringBoot自定配置SpringBoot事件监听SpringBoot流程分析SpringBoot监控SpringBoot部署 02-SpringBoot自动配置-Condition-1 Condition是Spring4.0后引入的条件化配置接口&#xff0c;通过实现Condition接口可以完成有条件的加载相应的Bean Co…

移动架构43_什么是Jetpack

Android移动架构汇总​​​​​​​ 文章目录一 Android 开发框架演变1 MVC2 MVP3 MVVM二 什么是JetPack三 如何构建支持Jetpack项目一 Android 开发框架演变 1 MVC Model-View-Controller&#xff0c;模型-视图-控制器&#xff0c;Model负责数据管理&#xff0c;View负责UI显…

创建Vite+Vue3+TS基础项目

前言&#xff1a; 本篇内容不涉及插件的安装以及配置&#xff0c;具体安装及配置篇可以看下面目录&#xff0c;本篇只涉及创建ViteVue3TS基础项目相关内容。不讲废话&#xff0c;简单直接直接开撸。 目录 npm create vite vue3练习2 -- --template vue-ts npm i vue-rout…

线性表 顺序表数组

初识线性表 文章目录初识线性表线性表的类型定义基本操作&#xff08;一&#xff09;init&#xff0c;destory&#xff0c;clear基本操作&#xff08;二&#xff09; 判空 &#xff0c;求长基本操作&#xff08;三&#xff09;取值&#xff0c;取位置基本操作&#xff08;四&am…

图解LeetCode——剑指 Offer 12. 矩阵中的路径

一、题目 给定一个 m x n 二维字符网格 board 和一个字符串单词 word 。如果 word 存在于网格中&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 单词必须按照字母顺序&#xff0c;通过相邻的单元格内的字母构成&#xff0c;其中“相邻”单元格是那些水平相…

Solon2 的应用生命周期

Solon 框架的应用生命周期包括&#xff1a;一个初始化函数时机点 六个事件时机点 两个插件生命时机点 两个容器生命时机点&#xff08;v2.2.0 版本的状态&#xff09;&#xff1a; 提醒&#xff1a; 启动过程完成后&#xff0c;项目才能正常运行&#xff08;启动过程中&…

基于麻雀算法改进的BP神经网络客流量预测,SSA-BP

目录 背影 BP神经网络的原理 BP神经网络的定义 BP神经网络的基本结构 BP神经网络的神经元 BP神经网络的激活函数&#xff0c; BP神经网络的传递函数 麻雀算法原理 麻雀算法主要参数 麻雀算法流程图 麻雀算法优化测试函数代码 基于麻雀算法改进的BP神经网络坑基监测 数据 matlab…

Windows 11 安装 Docker Desktop

Windows 环境安装 WSL2 WSL 简介 WSL 全称是 Windows Subsystem for Linux &#xff0c;适用于 Linux 的 Windows 子系统&#xff0c;可让开发人员按原样运行 GNU/Linux 环境&#xff0c;包括大多数命令行工具、实用工具和应用程序&#xff0c;且不会产生传统虚拟机或双启动设…

低线城市外卖市场逐渐下沉,创业者如何有效开展本地外卖平台

近年来&#xff0c;我国网上外卖营业额不断上升&#xff0c;使我国餐饮业的比重越来越高。 随着外卖市场的下沉&#xff0c;低线城市的用户开始使用外卖平台 由于我国在线外卖行业逐渐成熟&#xff0c;一、二线主流市场逐渐饱和&#xff0c;外卖行业逐渐开始向低线城市发展&…

非标自动化设备远程监控解决方案

为了实现企业自动化生产&#xff0c;提高工作效率和稳定性&#xff0c;需对整个工厂进行远程监控和管理。 在工厂建立了一个远程监控系统&#xff0c;可以实现对工业自动化的设备状态进行远程实时监控&#xff0c;同时可以利用无线网络技术来实现对设备的数据采集和远程管理。 …

Guava ——Joiner和Splitter

大家好&#xff0c;这里是一口八宝周&#x1f44f;欢迎来到我的博客❤️一起交流学习 文章中有需要改进的地方请大佬们多多指点 谢谢&#x1f64f;在本篇文章中&#xff0c;我将用实例展示&#xff0c;如何使用Joiner将集合转换为 String &#xff0c;以及使用Splitter将 Strin…

如何使用EvilTree在文件中搜索正则或关键字匹配的内容

关于EvilTree EvilTree是一款功能强大的文件内容搜索工具&#xff0c;该工具基于经典的“tree”命令实现其功能&#xff0c;本质上来说它就是“tree”命令的一个独立Python 3重制版。但EvilTree还增加了在文件中搜索用户提供的关键字或正则表达式的额外功能&#xff0c;而且还…

Android性能优化系列篇:弱网优化

弱网优化1、Serializable原理通常我们使用Java的序列化与反序列化时&#xff0c;只需要将类实现Serializable接口即可&#xff0c;剩下的事情就交给了jdk。今天我们就来探究一下&#xff0c;Java序列化是怎么实现的&#xff0c;然后探讨一下几个常见的集合类&#xff0c;他们是…

sklearn中的数据预处理和特征工程

目录 一.数据挖掘的五大流程 1. 获取数据 2. 数据预处理 3. 特征工程&#xff1a; 4. 建模&#xff0c;测试模型并预测出结果 5. 上线&#xff0c;验证模型效果 二.数据预处理 1.数据无量纲化 2.preprocessing.MinMaxScaler(数据归一化) 3.preprocessing.Standard…

Linux编译器——gcc/g++(预处理、编译、汇编、链接)

目录 0.程序实现的两大环境 1.gcc如何完成 预处理 编译 汇编 链接 2.动态库与静态库 对比二者生成的文件大小 3. gcc常用选项 0.程序实现的两大环境 任何一个C程序的实现都要经过翻译环境与执行环境。 在翻译环境中又分为4个部分&#xff0c;预编译、编译、汇编与链…

Spring Cloud配置application.yml与bootstrap.yml区别及多profile配置 | Spring Cloud 6

一、前言 Spring Cloud 构建于 Spring Boot 之上&#xff0c;在 Spring Boot 中有两种上下文&#xff0c;一种是 bootstrap&#xff0c;另外一种是 application。 二、bootstrap与application (.yml/.properties) 2.1 两者区别 bootstrap.yml/bootstrap.properties 和 appl…