- 博客(20)
- 资源 (1)
- 收藏
- 关注
原创 1.HDFS架构解析之支持高并发的设计
这里我们可以看到在真正写数据之前会先预写滚动日志,那么如果当滚动日志这块buffer写满之后就会造成服务不可用,这里当然可以进行溢写磁盘,但是我们知道写磁盘这个过程是比较慢的,还是会造成服务不可用这个问题。首先hdfs的架构是主从式架构,主节点要负责元数据的管理及写入滚动日志,所有请求都是需要先到namenode这里,所以namenode的设计是支持高并发的一个重点。这里hdfs采用了两块缓存的方式,当前的写满了会进行缓存交换,然后再后台进行溢写磁盘操作,另一块缓存可以继续写日志。
2025-03-11 17:10:58
307
原创 5.12生产者如何处理超时的批次
这里肯定又要想到sender线程了,因为当时做处理过程概览的时候有一个步骤六,我们一直没有去分析,这个步骤当时说是放弃超时的batch,准确来说要在这里看一下是如何处理的。再来看一下 abortExpiredBatches方法,会发现如果消息有异常了也会对内存做相应的处理。这里要去看一下maybeExpire判断超时的一个标准。最后看到了熟悉的done方法,这次会走他的另一个分支。这里最终的思想还是交给用户自己去处理。我们跟进去看一下是如何处理的。
2023-03-15 10:47:19
160
原创 5.11消息有异常如何处理
最后如果真的是有一些消息带有异常导致无法正常发送,我们也不能放任不管,这样就丢数据了,通常的做法就是在生产者代码的回调函数中捕获到这样的消息,将它存储到备用链路里面,防止丢数据。这里主要还是之前看到的Sender.java中的completeBatch方法。我们可以简单的看一下reenqueue做了什么处理。
2023-03-15 10:43:15
542
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人