随笔分类 - Java
摘要:前言 基于3.2.2-release版本 架构图 DS的架构图貌似年久失修,和代码已经有一些偏差了,不过还是可以用作参考。 官方文档:Dolphin Scheduler 系统架构设计 Master Worker之间的服务发现 DS抽象了一个Registry作为Master和Worker节点统一的注册
阅读全文
摘要:原文:How G1 Garbage Collector work in Java 作者:Perspective Mentor G1垃圾收集器采用了一个全新的垃圾收集方式,这让它在Java中的其它GC算法中鹤立鸡群。 介绍 G1(Garbage-First)是作为Parallel和CMS的替代者被引入
阅读全文
摘要:我们有一个A,引用B: public class A { private B b; public void setB(B b) { this.b = b; } public B getB() { return b; } @Override public String toString() { ret
阅读全文
摘要:本篇文章大量内容来源于官方的代码注释,看起来会比较枯燥,但了解Spring最直接,最正规的方式也就如此了。 庞大的BeanFactory家族 DefaultListableBeanFactory是支撑ApplicationContext底层的BeanFactory,它有一张错综复杂的继承关系图...
阅读全文
摘要:周末躺不平,摆不烂,卷不动,随便读一篇paper吧 原文:Kafka: a Distributed Messaging System for Log Processing 作者:Jay Kreps / Neha Narkhede / Jun Rao 这三尊神就是当初在LinkedIn开发Kafka的
阅读全文
摘要:CVTE的面试里第二个答的不好的地方就是ConcurrentHashMap。 构造方法 默认构造方法 // 创建一个新的,具有默认表达小16的空Map public ConcurrentHashMap() { } 在默认构造方法中,我们可以看到ConcurrentHashMap实际上什么也没做,根据
阅读全文
摘要:从高层来看 AQS,即AbstractQueuedSynchronizer类,无论是听起来还是看起来,它都很令人畏惧,但抛离它的实现原理,站在AQS的用户——比如Mutex、CountDownLatch这些类——的视角来看,AQS是一个非常好的助手。 AQS是一个用于实现同步器工具的框架,信号量、M
阅读全文
摘要:前言 最近在学Rust,今天突然想到一段Java代码 public class Main { public static void main(String []args) { int a = 16; new Thread(() -> { System.out.println(a); }).start
阅读全文
摘要:最多一次:消息最多被消费一次,可能丢失 最少一次:消息最少被消费一次,可能被重复消费多次 精确一次:消息会且只会被消费一次 Producer默认语义 默认情况下,Kafka会在producer的消息写入到分区leader副本的磁盘日志文件中后发送响应,若producer没接收到响应,它会尝试重新发送
阅读全文
摘要:Controller? 就是平时说的集群leader,和分区leader不是一个概念,这是在集群中的所有broker中选出一个唯一的leader,它用来控制整个集群的各种事宜,所以叫Controller。 怎么控制 整个Kafka集群实际上是建立在Zookeeper上的,所以集群的控制实际上也就是各
阅读全文
摘要:本地LEO和Remote LEO Kafka分区的follower副本的LEO属性保存了两份: 本地LEO:在follower副本所在broker的缓存中保存一份 Remote LEO:在leader副本所在的broker的缓存中保存一份(Remote LEO) 本地LEO很简单,就是followe
阅读全文
摘要:poll IO模型与内部线程 Consumer消费多个来自多个Topic的多个分区的数据,在新版本中,它使用类似select、epoll这种IO模型来达到用一个线程管理多个来源的数据的功能。 不过,Consumer内部还是分为两个线程: Heartbeat线程:定时向broker发送heartbea
阅读全文
摘要:Producer Producer做的工作 确认消息发送到的partition,相同key映射到相同分区,无key轮询 寻找分区的leader所在的Kafka broker,Producer可以选择不同的策略来发送消息 直接发送成功 leader响应写入操作后成功 ... Producer异常 Pr
阅读全文
摘要:Producer新旧对比 新版本: 发送过程被分为两个线程,一条消息发送后经用户主线程进入内存缓冲区,Sender I/O线程将缓冲区中的数据分批发给Kafka broker 完全异步发送消息,通过Future或Callback来通知发送者 分批机制,提升整体吞吐量 轮询方式对无key消息分区,更加
阅读全文
摘要:主要概念和术语 Event(事件)是一个现实世界或业务中发生的事,也叫消息或记录,说白了就是你写入Kafka的消息。Event具有key、value和timestamp,这和其它的消息系统有点儿不一样。 Producer和Consumer不介绍了,官方文档有这么一句话:Producer从不需要等待C
阅读全文
摘要:并发问题的根源 可见性:一个线程的操作结果是否对另一个线程可见 原子性:一个线程进行操作时是否会被其它线程干扰 可见性问题的来源 缓存:每一个线程会有自己的工作内存来缓存主存中的内容,线程通过这个缓存操作主存,所以可能存在刷新不及时的问题 指令重排:CPU会对编译后的字节码指令进行重排序后执行,原则
阅读全文
摘要:我有这样一个Service,我需要在外面注入queueSize和timeout这两个属性: @Service @Slf4j public class BlockingQueueMessageService implements MessageService, InitializingBean { p
阅读全文
摘要:最近想试试面试个实习生,于是就寻思快速的过一遍SpringBoot的课,所以就找了个网课来看。 我看的是这个:点击跳转,然后看了两天了,快撸完了,一点儿笔记没记,虽然记了也会忘,但还是感觉踏实一点。 parent以及starter 提供经过测试的兼容版本 通过父项目的dependencyManage
阅读全文
摘要:起因是在每一个类中我都得写上下面的代码: private Logger logger = LoggerFactory(this.getClass().getSimpleName()); 虽然不是很长,但是我就是不想写,每次写这个我都会很烦。开发中有很多属性都是这样。 然后,我就想到,如何将这一过程自
阅读全文
摘要:RowBounds的内存分页 SqlSession的各种查询方法中都有一个可选的RowBounds参数,该对象用于MyBatis实现内存分页: RowBounds有这样两个属性: private final int offset; private final int limit; limit是每一页
阅读全文

浙公网安备 33010602011771号