- 博客(80)
- 收藏
- 关注
原创 1. Broker启动流程
Pulsar所有请求,不论是来自admin管理端还是client客户端,最终都由Broker端进行处理,此外Broker端还具有负载管理、Schema管理等功能,因此开篇首先分析下Broker的启动流程。
2022-11-28 21:58:10
1108
原创 4、Yarn资源隔离
YARN中集成了CGroups的功能,使得NodeManger可以对Container的CPU资源使用进行控制,如可以对单个container的CPU使用进行控制,也可以对NodeManger管理的总CPU进行控制。
2020-10-21 14:19:00
591
原创 1、动态规划
https://blog.youkuaiyun.com/l_ppp/article/details/108899586?utm_medium=distribute.pc_feed.none-task-blog-vip_agree_hot-1.nonecase&depth_1-utm_source=distribute.pc_feed.none-task-blog-vip_agree_hot-1.nonecase
2020-10-17 14:21:15
117
原创 0、流式计算引擎对比
Flink是标准的实时处理引擎,而Spark的两个模块Spark Streaming和Structured Streaming都是基于微批处理的,不过现在Spark Streaming已经非常稳定基本都没有更新了,然后重点转移到Spark SQL和Structured Streaming了。
2020-10-13 19:29:15
240
原创 3、Yarn整体概述
在Hadoop2.0中, YARN负责管理MR中的资源(MEM、CPU等)并且将其打包成Container,这样可以精简MR使之专注于其擅长的数据处理任务而无需考虑资源调度。
2020-10-11 15:57:09
361
原创 1、集合框架-Collection
Collection表示独立元素的序列,这些元素都服从一条或多条规则。List必须按照插入顺序保存元素,Set不能有重复元素,Queue按照排队规则来确定对象产生的顺序。
2020-10-11 14:53:06
153
原创 0、集合框架知识体系
集合可以看作是一种容器,用来存储对象信息。所有集合类都位于java.util包下,但支持多线程的集合类位于java.util.concurrent包下。
2020-10-11 14:46:57
133
原创 10、线程池实现原理
线程池由工作线程和任务队列组成,它可以重用线程来避免线程创建带来的开销,在任务过多时通过排队避免创建过多线程来减少系统资源消耗和竞争,确保任务有序完成。
2020-09-20 22:10:12
272
原创 9、并发工具-CountDownLatch/CyclicBarrier/Semphore
JUC提供了几个非常有用的并发工具,包括CountDownLatch、CyclicBarrier、Semaphore,使用这些工具可以有效提高并发编程。
2020-09-20 22:09:11
120
原创 8、并发安全集合
JUC 为常用的集合提供了并发安全的版本,Map 的并发安全集合 ConcurrentHashMap,List 并发安全集合 CopyOnWriteArrayList,Set 并发安全集合 CopyOnWriteArraySet,Queue的并发安全的队列 ConcurrentLinkedQueue。
2020-09-20 22:06:37
115
原创 7、ThreadLocal实现原理
ThreadLocal 是一个线程的本地变量,也就意味着这个变量是线程独有的,是不能与其他线程共享的,这样就可以避免资源竞争带来的多线程的问题,这种解决多线程的安全问题和lock是有本质的区别的。
2020-09-20 21:57:43
134
原创 6、Lock实现原理
当多个线程访问某个公共资源时,需要通过加锁来保证资源的访问不会出问题。java提供了两种方式来加锁,一种是关键字:synchronized,一种是concurrent包下的lock锁。实现lock的几个关键词:计数值、双向链表、CAS+自旋。
2020-09-20 17:34:13
135
原创 5、CAS原子操作
Java 中可以通过锁和 CAS 的方式来实现原子操作。但是synchronized 是一个重量级操作,性能较差,CAS 在保证原子性中有较好的性能。此外,synchronized 的优化中,偏向锁、轻量级锁也都用的到了 CAS。
2020-09-20 16:59:50
452
原创 4、volatile实现原理
volatile可以保证线程可见性且提供了一定的有序性,但是无法保证原子性。在JVM底层volatile是采用“内存屏障”来实现的。通过汇编代码发现,加入volatile关键字时,会多出一个lock前缀指令,lock前缀指令实际上相当于一个内存屏障(也成内存栅栏)。
2020-09-19 19:19:58
300
原创 3、synchronized实现原理
并发编程中用到最多的关键字毫无疑问是synchronized。那么,synchronized如何使用?synchronized是如何实现同步加锁的?synchronized解决了并发编程的哪些问题?
2020-09-19 19:06:26
216
原创 2、并发编程-理论篇
编写并发程序是比较困难的,因为并发程序极易出现Bug,这些Bug有都是比较诡异的,很多都是没办法追踪,而且难以复现。要快速准确的发现并解决这些问题,首先就是要弄清并发编程的本质,并发编程要解决的是什么问题。
2020-09-19 16:16:37
194
原创 3、Zookeeper数据同步及脑裂
ZAB协议是为分布式协调服务Zookeeper专门设计的一种支持崩溃恢复原子广播协议。在Zookeeper中,主要依赖ZAB协议来实现分布式数据一致性,基于该协议,Zookeeper实现了一种主备模式的系统架构来保持集群中各个副本之间的数据一致性。
2020-08-25 20:10:47
457
原创 2、Zookeeper选举机制
Zookeeper集群首次启动或运行期间leader挂掉时,需要进行Leader选举。在Leadr选举结束前,集群处于不可用状态,所以Zookeeper满足CP。
2020-08-25 20:08:37
392
原创 1、zookeeper整体概述
Zookeeper 是一个分布式协调服务框架,主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、应用配置管理、集群管理等。
2020-08-25 19:59:21
193
原创 7、kafka控制器
在于分布式系统中,总会有一个地方需要对全局 meta 做一个统一的维护,Kafka 的 Controller 就是充当这个角色的。
2020-08-16 20:43:01
132
原创 2、Flink实时精准去重
去重计算是数据分析业务里常见的指标计算,如网站一天的访问用户数,离线计算是一个全量、一次性计算的过程通常可通过distinct的方式得到去重结果,而实时计算是一种增量、长期计算过程,在面对不同的场景,如数据量的大小、计算结果精准度等要求时可使用不同的方案。
2020-08-16 09:23:22
420
原创 1、Flink实时热门商品统计
TopN 是报表统计和大屏展示非常常见的功能,主要用来实时计算排行榜。流式的TopN可以使业务方在内存中按照某个统计指标(如出现次数)计算排名并快速发出更新后的排行榜。
2020-08-15 19:54:12
303
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人