大数据技术面试-Flume、kafka

2023-10-30

                                大数据技术面试-Flume、kafka

1.Flume组成有哪些?
2.Flume拦截器有哪些知识点?
3.Flume采集数据会丢失吗?
4.FileChannel如何优化?
5.如何控制Kafka丢不丢数据?
6.Kafka分区分配策略默认哪两种?
 

4.4 Flume相关总结
4.4.1 Flume组成,Put事务,Take事务
1)Flume组成,Put事务,Take事务
        Taildir Source:断点续传、多目录。Flume1.6以前需要自己自定义Source记录每次读取文件位置,实现断点续传。
        File Channel:数据存储在磁盘,宕机数据可以保存。但是传输速率慢。适合对数据传输可靠性要求高的场景,比如,金融行业。
        Memory Channel:数据存储在内存中,宕机数据丢失。传输速率快。适合对数据传输可靠性要求不高的场景,比如,普通的日志数据。
        Kafka Channel:减少了Flume的Sink阶段,提高了传输效率。           
        Source到Channel是Put事务
        Channel到Sink是Take事务


4.4.2 Flume拦截器
        (1)拦截器注意事项
                项目中自定义了:ETL拦截器和区分类型拦截器。
采用两个拦截器的优缺点:优点,模块化开发和可移植性;缺点,性能会低一些
        (2)自定义拦截器步骤
a)实现 Interceptor
b)重写四个方法

  •         initialize 初始化
  •         public Event intercept(Event event) 处理单个Event
  •         public List<Event> intercept(List<Event> events) 处理多个Event,在这个方法中调用Event intercept(Event event)
  •         close 方法


c)静态内部类,实现Interceptor.Builder


4.4.3 Flume采集数据会丢失吗?(防止数据丢失的机制)
不会,Channel存储可以存储在File中,数据传输自身有事务。

4.4.4 Flume内存
开发中在flume-env.sh中设置JVM heap为4G或更高,部署在单独的服务器上(4核8线程16G内存)
-Xmx与-Xms最好设置一致,减少内存抖动带来的性能影响,如果设置不一致容易导致频繁fullgc。

4.4.5 FileChannel优化
通过配置dataDirs指向多个路径,每个路径对应不同的硬盘,增大Flume吞吐量。
官方说明如下:
Comma separated list of directories for storing log files. Using multiple directories on separate disks can improve file channel peformance
checkpointDir和backupCheckpointDir也尽量配置在不同硬盘对应的目录中,保证checkpoint坏掉后,可以快速使用backupCheckpointDir恢复数据

4.4.6 HDFS Sink小文件处理
(1)HDFS存入大量小文件,有什么影响?
元数据层面:每个小文件都有一份元数据,其中包括文件路径,文件名,所有者,所属组,权限,创建时间等,这些信息都保存在Namenode内存中。所以小文件过多,会占用Namenode服务器大量内存,影响Namenode性能和使用寿命
计算层面:默认情况下MR会对每个小文件启用一个Map任务计算,非常影响计算性能。同时也影响磁盘寻址时间。
        (2)HDFS小文件处理
官方默认的这三个参数配置写入HDFS后会产生小文件,hdfs.rollInterval、hdfs.rollSize、hdfs.rollCount
基于以上hdfs.rollInterval=3600,hdfs.rollSize=134217728,hdfs.rollCount =0,hdfs.roundValue=10,hdfs.roundUnit= second几个参数综合作用,效果如下:
(1)tmp文件在达到128M时会滚动生成正式文件
(2)tmp文件创建超10秒时会滚动生成正式文件


4.5 Kafka相关总结

4.5.1 Kafka架构



4.5.2 Kafka压测
Kafka官方自带压力测试脚本(kafka-consumer-perf-test.sh、kafka-producer-perf-test.sh)。Kafka压测时,可以查看到哪个地方出现了瓶颈(CPU,内存,网络IO)。一般都是网络IO达到瓶颈。

4.5.3 Kafka的机器数量
Kafka机器数量=2*(峰值生产速度*副本数/100)+1

4.5.4 Kafka的日志保存时间
7天
4.5.5 Kafka的硬盘大小
每天的数据量*7天

4.5.6 Kafka监控
公司自己开发的监控器;
开源的监控器:KafkaManager、KafkaMonitor

4.5.7 Kakfa分区数
分区数并不是越多越好,一般分区数不要超过集群机器数量。分区数越多占用内存越大(ISR等),一个节点集中的分区也就越多,当它宕机的时候,对系统的影响也就越大。
分区数一般设置为:3-10个

4.5.8 副本数设定
一般我们设置成2个或3个,很多企业设置为2个。

4.5.9 多少个Topic
          通常情况:多少个日志类型就多少个Topic。也有对日志类型进行合并的。

4.5.10 Kafka丢不丢数据
Ack=0,相当于异步发送,消息发送完毕即offset增加,继续生产。
Ack=1,leader收到leader replica 对一个消息的接受ack才增加offset,然后继续生产。
Ack=-1,leader收到所有replica 对一个消息的接受ack才增加offset,然后继续生产。

4.5.11 Kafka的ISR副本同步队列
ISR(In-Sync Replicas),副本同步队列。ISR中包括Leader和Follower。如果Leader进程挂掉,会在ISR队列中选择一个服务作为新的Leader。有replica.lag.max.messages(延迟条数)和replica.lag.time.max.ms(延迟时间)两个参数决定一台服务是否可以加入ISR副本队列,在0.10版本移除了replica.lag.max.messages参数,防止服务频繁的进去队列。
任意一个维度超过阈值都会把Follower剔除出ISR,存入OSR(Outof-Sync Replicas)列表,新加入的Follower也会先存放在OSR中。

4.5.12 Kafka分区分配策略
在 Kafka内部存在两种默认的分区分配策略:Range和 RoundRobin。
Range是默认策略。Range是对每个Topic而言的(即一个Topic一个Topic分),首先对同一个Topic里面的分区按照序号进行排序,并对消费者按照字母顺序进行排序。然后用Partitions分区的个数除以消费者线程的总数来决定每个消费者线程消费几个分区。如果除不尽,那么前面几个消费者线程将会多消费一个分区。
例如:我们有10个分区,两个消费者(C1,C2),3个消费者线程,10 / 3 = 3而且除不尽。
C1-0 将消费 0, 1, 2, 3 分区
C2-0 将消费 4, 5, 6 分区
C2-1 将消费 7, 8, 9 分区
RoundRobin:前提:同一个Consumer Group里面的所有消费者的num.streams(消费者消费线程数)必须相等;每个消费者订阅的主题必须相同。
第一步:将所有主题分区组成TopicAndPartition列表,然后对TopicAndPartition列表按照hashCode进行排序,最后按照轮询的方式发给每一个消费线程。

4.5.13 Kafka中数据量计算
每天总数据量100g,每天产生1亿条日志, 10000万/24/60/60=1150条/每秒钟
平均每秒钟:1150条
低谷每秒钟:400条
高峰每秒钟:1150条*(2-20倍)=2300条-23000条
每条日志大小:0.5k-2k
每秒多少数据量:2.3M-20MB

4.5.14 Kafka挂掉
1)Flume记录
2)日志有记录
3)短期没事

4.5.15 Kafka消息数据积压,Kafka消费能力不足怎么处理?
1)如果是Kafka消费能力不足,则可以考虑增加Topic的分区数,并且同时提升消费组的消费者数量,消费者数=分区数。(两者缺一不可)
2)如果是下游的数据处理不及时:提高每批次拉取的数量。批次拉取数据过少(拉取数据/处理时间<生产速度),使处理的数据小于生产的数据,也会造成数据积压。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

大数据技术面试-Flume、kafka 的相关文章

  • luci页面“save&apply”的实现分析

    页面上配置的 保存 应用 功能的实现 最终调用到 etc config ucitrack的配置文件 例如配置无线时 对应ucitrack配置文件中的config network option init network list affect

随机推荐

  • ThreadLocal的使用

    当使用ThreadLocal维护变量时 ThreadLocal为每个使用该变量的线程提供独立的变量副本 所以每一个线程都可以独立地改变自己的副本 而不会影响其它线程所对应的副本 演示代码 package com oa public clas
  • Python file"文件"常用方法(三):读+写+刷新-write()、writelines()、read()、readline()、readlines()、flush()

    一 write 方法 将字符串写入文件 返回的是写入的字符长度 write 方法可将任何字符串写入一个打开的文件 需要重点注意的是 Python字符串可以是二进制数据 而不是仅仅是文字 在文件关闭前或缓冲区刷新前 字符串内容存储在缓冲区中
  • Anaconda3 环境下安装Open3D(自学笔记)

    介绍 Open3D是一个开源库 支持快速开发处理3D数据的软件 Open3D的核心功能包括 3D数据结构 3D数据处理算法 场景重建 表面对齐 3D可视化 基于物理的渲染 PBR 支持PyTorch TensorFlow 支持GPU加速处理
  • Docker安装JDK(二)

    安装的两种方式 通过已有的镜像直接pull安装 自己通过dockerfile等命令打包一个镜像安装 此种方式我们到已有镜像满足不了自身需求时使用 本章是根据第一种方式安装的 根据文章docker安装指定版本的tag镜像得到安装JDK的Doc
  • verilog 学习笔记 —— 时序逻辑 Sequential Logics (Latches and Flip-Flops 锁存器和触发器)

    1 D flip flop D触发器 module top module input clk Clocks are used in sequential circuits input d output reg q Use a clocked
  • 轻松学会Java导出word,一篇文章就够了!

    很多小伙伴在工作中 可能又这样一个需求 根据word模板去填充数据 变成我们想要的word文档 这是很多刚进入职场的小白都会碰到的需求 当遇上这种需求 我们可以通过这篇文章要讲的poi tl 来做处理 导入依赖
  • Centos7 安装部署Kubernetes(k8s)集群过程

    1 系统环境 服务器版本 docker软件版本 CPU架构 CentOS Linux release 7 9 Docker version 20 10 12 x86 64 2 前言 如下图描述了软件部署方式的变迁 传统部署时代 虚拟化部署时
  • 用Node.js搭建一个简单Web服务器

    Node js是基于Chrome V8引擎的JavaScript运行时环境 它允许我们在服务器端运行JavaScript代码 这让我们可以用JavaScript构建Web服务器 处理请求和响应 我们一起探索了如何用Node js搭建一个简单
  • 数据结构——链表课后习题解答

    学习完链表 做了一遍题 码完代码 能跑的都跑了一遍 检验了一下 答案若有错误 欢迎指出 感谢 以下是题目和答案 以下题目若没有指出 全是用单向链表 目录 1 逆序一个链表 2 如何判断一个链表是否有环 3 求链表的中间节点 要求只用一重循环
  • 【speech&nlp】如何实现总体数据按照长短排序,同样长度数据随机排序

    在做speech nlp任务时 经常有这样一个需求 假设有一个数据集 有1000条数据 但是只有100种长度 所以必然存在某些数据是一样长的 我们想要让总体按照长短排序 但是同样长的数据要随机排序 经过了这个操作 再分batch 这样的效果
  • jmeter做接口压力测试_jmeter接口性能测试

    jmeter是apache公司基于java开发的一款开源压力测试工具 体积小 功能全 使用方便 是一个比较轻量级的测试工具 使用起来非常简单 因为jmeter是java开发的 所以运行的时候必须先要安装jdk才可以 jmeter是免安装的
  • 解决vscode找不到Python自定义模块,报错No module named ‘xxx‘

    笔者最近在学习python过程中 把在pycharm运行成功的项目放在vscode中 发现一些报错 比如找不到笔者自定义的模块 参考了一些说法与办法 现将解决方法记录于此 前言 vscode之所以找不到自定义模块 与其PYTHONPATH有
  • 将yolov5检测结果保存成json文件

    将yolov5检测结果保存成json文件 每帧图片对应一个json文件 json文件中包含图片名称 检测到的bbox信息 分类结果 中心坐标和置信度 函数json add以图片名 该图像内的所有bbox信息 以及bbox数量为输入 在yol
  • PCB画板(Altium Designer)

    b站学习视频 1 https www bilibili com video BV1ei4y1L7TU spm id from 333 999 0 0 这力荐 2 https www bilibili com video BV1tE411g7
  • 判断多边形凹凸

    任意给定一个多边形 判断它是凸还是凹 多边形的顶点以逆时针方向的序列来表示 include
  • 关于小程序中如何获取openid

    想要获取用户的openid首先要明白获取的过程 1 登录 2 发请求获取openid 实现 先定义一组数据 后面发请求获取openid时要的参数 一个是appid 一个是secret秘钥 这两个在注册开发者平台后可以查到 如下 global
  • 【Vulnhub系列】DC1

    文章目录 基本信息 实验过程 额外内容 使用CVE2014 3704添加管理账号 另一种查询具有root权限命令的find语句 下载地址 https www vulnhub com entry dc 1 1 292 基本信息 Kali 19
  • Counterfactual Zero-Shot and Open-Set Visual Recognition

    Counterfactual Zero Shot and Open Set Visual Recognition 1 Introduction 文献提出一个反事实框架 是由对不可见类的泛化来支撑的 作者基于反事实的一致性规则 反事实确实是基
  • C++同步技术——Mutex相关 (转)

    进程的互斥运行 正常情况下 一个进程的运行一般是不会影响到其他正在运行的进程的 但是对于某些有特殊要求的如以独占方式使用串行口等硬件设备的程序就要求在其进程运行期间不允许其他试图使用此端口设备的程序运行的 而且此类程序通常也不允许运行同一个
  • 大数据技术面试-Flume、kafka

    大数据技术面试 Flume kafka 1 Flume组成有哪些 2 Flume拦截器有哪些知识点 3 Flume采集数据会丢失吗 4 FileChannel如何优化 5 如何控制Kafka丢不丢数据 6 Kafka分区分配策略默认哪两种