博文

20# Apache Kafka 的学习笔记

 Kafka 相当厉害啊. 目录 Kafka Kafka 怎么进行数据备份 Consumer 在 Leader 还是 Follower 中拿去数据 Kafka ISR 机制 Kafka 数据不丢失不重复 Kafka 如何实现幂等性 Kafka 为什么速度快 - 页缓存技术 kafka 数据格式都是什么 Kafka 如何清理过期数据 kafka 的   Broker, partition, segment   都是啥 kafka 一条 Message 中包含哪些信息 Kafka 蓄水池机制 Kafka Kafka 怎么进行数据备份 备份是 0.8 版本后的功能. 一个备份数量为 n 的集群允许 n-1 个节点失效. 有一个节点作为 Leader 节点, 负责保存其他备份节点的列表, 并维持备份间状态同步. Consumer 在 Leader 还是 Follower 中拿去数据 读写操作都来自 Leader, Follower 只负责数据备份和心跳检测 Leader 存活状态, 并及时顶替. Kafka ISR 机制 Kafka 为了保持数据一致性而设计了 ISR 机制. 数据可靠主要是依赖于 Broker 中的 in-sync Replica 副本同步队列机制, 主要逻辑是制造冗余, 数据互备. Leader 会维护一个与其保持同步的 Replica 集合, 然后保证这组集合至少有一个存活, 并且消息 Commit 成功. Partition Leader 保持同步的 Partition Follower 集合, 当 ISR 中的 Partition Follower 完成数据的同步之后给 Leader 发送 ack. 如果 Partition Follower 长时间 (Replica.lag.time.max.ms) 未向 Leader 同步数据, 则该 Partition Follower 将被踢出 ISR. Partition Leader 发生故障之后, 就会从 ISR 中选举新的 Partition Leader. 当 ISR 中所有 Replica 都向 Leader 发送 ACK 时, Leader 执行 Commit. Kafka 数据不丢失不重复 首先, Kafka 并不能完全的保证不丢失不重复. 0.11 版本前, Kafka 有两次消息传递:

19# Apache Zookeeper 的学习笔记 (WIP)

 目录 [ Zookeeper ]( #zookeeper )       1. [ Zookeeper 的 Leader 选举机制 ]( #zookeeper-的-leader-选举机制 )           1. [ Zookeeper 服务端启动时选举 ]( #zookeeper-服务端启动时选举 )           2. [ Zookeeper 运行中的选举 ]( #zookeeper-运行中的选举 )       2. [ Leader 突然下线怎么办 ]( #leader-突然下线怎么办 ) ## Zookeeper Zookeeper 是一个分布式协调服务, 集群由 Leader 和 Follower 组成. ### Zookeeper 的 Leader 选举机制 超过两台的 Zookeeper 集群就会选举 Leader. Zookeeper 提供的选举算法有三种: - LeaderElection - AuthFastLeaderElection - FastLeaderElection 默认的为 FastLeaderElection. #### Zookeeper 服务端启动时选举 只有 LOOKING 寻找 Leader 服务状态的实例才会去执行选举算法. 1. 每一个 Server 发起一个投票投自己: 启动状态下集群中每一个实例都会默认自己是 Leader 并发起投票, 结束后改变 logicalClock 的值. 2. 从 recvQueue 接受其他实例发来的投票. 3. 选票后开始校验处理: 参照逻辑时钟验证选票是否为本轮投票, 是否来自 Looking 状态的实例. 4. 比较选票: 首先对比 ZXID, 以较大的作为 Leader; ZXID 相同, 则选取实例的唯一标识符, 选取较大的. 5. 统计选票; 偶数量的集群, 则判断是否有半数以上的实例接收到了相同的选票信息; 奇数量的集群, 则达到 $ \ frac {Example + 1 }{ 2 } $ 的服务器受到相同选票信息时完成. 6. 一旦选出 Leader, 则集群每个节点都更新自己的状态, Leader 进入 LEADING 状态, Follower 进入 FOLLOWER 状态. #### Zookeeper 运行中的选举 1.

18# Apache Flume 的学习笔记 (WIP)

目录  [ Flume ]( #flume )       1. [ Flume Pipeline 用什么方式储存 ]( #flume-pipeline-用什么方式储存 )       2. [ Flume 突然下线怎么办 重启后是重新输入 Flume 么 ]( #flume-突然下线怎么办-重启后是重新输入-flume-么 )       3. [ 如何设置 Flume 偏移量 ]( #如何设置-flume-偏移量 )       4. [ 为什么不用 flume 直接接 hbase 呢 ]( #为什么不用-flume-直接接-hbase-呢 )   ## Flume 1 ### Flume Pipeline 用什么方式储存 内存或文件 ### Flume 突然下线怎么办 重启后是重新输入 Flume 么 设置成文件储存 ### 如何设置 Flume 偏移量 ### 为什么不用 flume 直接接 hbase 呢  

17# Apache Spark 的学习笔记 (WIP)

 目录 Spark Spark 中 job, stage, Task 分别是什么 什么是 RDD reduceByKey 和 groupByKey 的区别 RDD 的创建方式 RDD 的依赖关系 为什么要划分依赖关系 RDD 的缓存持久化机制 Spark 调优 修改序列化机制压缩数据量 根据作业环境, 提交任务时调整 spark-submit.sh 参数 提高并行度 RDD 的重用和持久化 适当广播多次使用的变量 避免产生 Shuffle 可以减少网络 IO 和分区间传输消耗 使用 map-side 预先聚合 Shuffle 使用高性能算子 SparkStreaming 在消费 Kafka 时下线, 如何保证重启后继续消费 Spark 累加器 Spark 的工作机制 Spark 模块都有哪些 DStream 和 DStreamGraph 的区别 Spark Spark 是基于内存计算, MapReduce 基于磁盘运算, 所以速度更快. Spark 拥有高效的调度算法, 基于 DAG 形成一系列有向无环图. Spark 通过 RDD 算子来运算, 具有转换与动作两种操作, 可以把运算结果缓存在内存, 再计算出来. Spark 还拥有容错机制 Linage 算子, 可以把失败的任务重新执行. Spark 中 job, stage, Task 分别是什么 job 是提交给 Spark 的任务, 会被拆分为多组 Task, 每一次数据的 Shuffle 都会产生一个 stage; 每次 action 都会产生一个 job. stage 是 job 执行需要的阶段. 划分 stage 使每一个 stage 只有窄依赖, 可以实现流计算, 同时每一个 Task 对应一个分区, 增加了 Task 的并行运行量. Task 是 stage 的任务执行单元, 通常和 RDD 的 Partition 数量相同, 只是处理一个 Partition 上的数据; 每个 Task 都是一个 JVM 实例, JVM 的开启与销毁会降低系统运行效率; Task 是任务的最小单位, 最终运行在 Executor 中. 什么是 RDD RDD 就是弹性分布式数据集 Resilient Distributed Datasets, Spark 的数据抽象概念, 是一种不可变分布式对象集合; 每个 RDD