大数据面试:Zookeeper与Flume

Zookeeper

1.常用命令

ls 、 get 、 create 、 delete 、 deleteall

2.选举机制

半数机制 (过半机制): 2n + 1, 安装奇数台。

10 台服务器: 3 台。

20 台服务器: 5 台。

100 台服务器: 11 台。

台数多, 好处: 提高可靠性; 坏处: 影响通信延时。

3.Zookeeper 符合法则中哪两个?

3.1CAP理论

CAP理论告诉我们, 一个分布式系统不可能同时满足以下三种

  • 一致性 (C:Consistency)
  • 可用性 (A:Available)
  • 分区容错性 (P:Partition Tolerance)

这三个基本需求, 最多只能同时满足其中的两项, 因为P是必须的, 因此往往选择就在CP或者AP中。

1) 一 致性 (C:Consistency)

在分布式环境中, 一致性是指数据在多个副本之间是否能够保持数据一致的特性 。 在一致性的需求下, 当一个系统在数 据一致的状态下执行更新操作后, 应该保证系统的数据仍然处于一致的状态 。

2) 可用性 (A:Available)

可用性是指系统提供的服务必须一直处于可用的状态, 对于用户的每一个操作请求总是能够在有限的时间内返回结果。

3) 分区容错性 (P:Partition Tolerance)

分布式系统在遇到任何网络分区故障的时候, 仍然需要能够保证对外提供满足一致性和可用性的服务, 除非是整个网络 环境都发生了故障。

3.2ZooKeeper保证的是CP

(1) ZooKeeper不能保证每次服务请求的可用性 。 (注: 在极端环境下, ZooKeeper可能会丢弃一些请求, 消费者程序需要 重新请求才能获得结果) 。 所以说, ZooKeeper不能保证服务可用性。

(2) 进行Leader选举时集群都是不可用。

Zookeeper 脑裂

Zookeeper 采用过半选举机制, 防止了脑裂。

1. Zookeeper 用来干嘛了

(1) 作为 HA 的协调者: 如 HDFS 的 HA 、 YARN 的 HA。

(2) 被组件依赖: 如 Kafka 、 HBase 、 CK。

Flume

1.Flume 组成, Put 事务, Take 事务

1) Taildir Source

(1) 断点续传 、 多目录

(2) taildir 底层原理

(3) Taildir 挂了怎么办?

不会丢数: 断点续传

重复数据: 有可能

(4) 存在的问题及解决方案

①问题:

新文件判断条件 = iNode 值 + 绝对路径 (包含文件名)

日志框架凌晨修改了文件名称= 》导致会再次重读一次昨天产生的数据 ②解决:

方案一:建议生成的文件名称为带日期的。同时配置日志生成框架为不更名的;

方案二: 修改 TairDirSource 源码, 只按照 iNode 值去确定文件

2) file channel /memory channel/kafka channel

(1) File Channel

数据存储于磁盘, 优势: 可靠性高; 劣势: 传输速度低

默认容量: 100 万个 event

注意: FileChannel 可以通过配置 dataDirs 指向多个路径, 每个路径对应不同的硬盘, 增 大 Flume 吞吐量。

(2) Memory Channel

数据存储于内存, 优势: 传输速度快; 劣势: 可靠性差

默认容量: 100 个 event

(3) Kafka Channel

数据存储于 Kafka, 基于磁盘;

优势: 可靠性高;

传输速度快 Kafka Channel 大于 Memory Channel + Kafka Sink 原因省去了 Sink 阶段

(4) 生产环境如何选择

如果下一级是 Kafka, 优先选择 Kafka Channel。

如果是金融 、 对钱要求准确的公司, 选择 File Channel。

如果就是普通的日志, 通常可以选择 Memory Channel。 每天丢几百万数据 pb 级 亿万富翁, 掉 1 块钱会捡?

3) HDFS Sink

(1) 时间 (半个小时) or 大小 128m 且 设置 Event 个数等于 0, 该值默认 10 具体参数: hdfs.rollInterval=1800, hdfs.rollSize=134217728 且 hdfs.rollCount=0

4) 事务

Source 到 Channel 是 Put 事务

Channel 到 Sink 是 Take 事务

2.Flume 拦截器

1) 拦截器注意事项

(1) 时间戳拦截器: 主要是解决零点漂移问题

2) 自定义拦截器步骤

(1) 实现 Interceptor

(2) 重写四个方法

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

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

3) 拦截器可以不用吗?

时间戳拦截器建议使用。如果不用需要采用延迟 15-20 分钟处理数据的方式,比较麻烦。

3.Flume Channel 选择器

Replicating: 默认选择器 。 功能: 将数据发往下一级所有通道。

Multiplexing: 选择性发往指定通道。

4.Flume 监控器

1) 监控到异常现象

采用 Ganglia 监控器, 监控到 Flume 尝试提交的次数远远大于最终成功的次数, 说明 Flume 运行比较差 。 主要是内存不够导致的。

2) 解决办法?

(1) 自身: 默认内存是 20m, 考虑增加 flume 内存, 在 flume-env.sh 配置文件中修改 flume 内存为 4-6g

(2) 找朋友: 增加服务器台数

搞活动 618 = 》增加服务器 = 》用完在退出

日志服务器配置: 8- 16g 内存 、 磁盘 8T

5.Flume 采集数据会丢失吗?

如果是 kafka channel 或者 FileChannel 不会丢失数据,数据存储可以存储在磁盘中。

如果是 MemoryChannel 有可能丢。

6.Flume 如何提高吞吐量

调整 taildir source 的 batchSize 大小可以控制吞吐量, 默认大小 100 个 Event。

吞吐量的瓶颈一般是网络带宽。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值