自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(558)
  • 收藏
  • 关注

原创 聊聊 Kafka:如何避免消费组的 Rebalance

一、前言我们上一篇聊了 Rebalance 机制,相信你对消费组的重平衡有个整体的认识。这里再简单回顾一下,Rebalance 就是让一个 Consumer Group 下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程。在 Rebalance 过程中,Consumer Group 下所有的 Consumer 实例共同参与,在 Coordinator 协调者组件的帮助下,完成订阅主题分区的分配。但是,在整个过程中,所有实例都不能消费任何消息,因此它对 Consumer 的 TPS

2022-01-16 22:43:33 5471 1

原创 聊聊 Kafka:编译 Kafka 源码并搭建源码环境

一、前言老周这里编译 Kafka 的版本是 2.7,为啥采用这个版本来搭建源码的阅读环境呢?因为该版本相对来说比较新。而我为啥不用 2.7 后的版本呢?比如 2.8,这是因为去掉了 ZooKeeper,还不太稳定,生产环境也不太建议使用,所以以 2.7 版本进行源码搭建并研究。二、环境准备JDK:1.8.0_241Scala:2.13.6Gradle:5.6.3三、环境搭建3.1 JDK 环境搭建这个就不用我说了吧,搞 Java 的本机都有 JDK 环境。3.2 Scala 环境搭建

2021-10-10 23:08:59 1675 3

原创 聊聊 Kafka: 在 Linux 环境上搭建 Kafka

一、环境准备jdk下载地址链接:jdk 1.8,提取码: dv5hzookeeper下载地址链接:zookeeper3.4.14 ,提取码: 3dchkafka下载地址链接:kafka2.12,提取码: 61bc1.1 Java环境为前提1.1.1 上传jdk-8u261-linux-x64.rpm到服务器并安装# 安装命令rpm -ivh jdk-8u261-linux-x64.rpm 1.1.2 配置环境变量# 编辑配置文件,jdk的bin目录到/etc/profile文件,对所有

2021-08-18 00:31:31 3748 13

原创 聊聊 Kafka: Kafka 的基础架构

一、我与快递小哥的故事一个很正常的一个工作日,老周正在忙着啪啪啪的敲代码,办公司好像安静的只剩敲代码的声音。突然,我的电话铃声响起了,顿时打破了这种安静。我:喂,哪位?快递小哥:我是顺丰快递的,你有个包裹,请问你现在在家吗?我:哦,我现在不在家,晚上你再帮我送过来吧。快递小哥:要不我帮你放在菜鸟驿站吧?我:可以可以,谢谢了。还好有菜鸟驿站,不然工作日加班到很晚才回家,晚上快递小哥又下班了,得等到周末我在家快递小哥才能帮我送了。如果没有菜鸟驿站的话,我们来看下快递小哥与我的交互图:要是有

2021-08-09 00:29:33 4303 25

原创 一文读懂物联网 MQTT 协议之实战篇

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、前言上一篇我们介绍了 MQTT 协议格式以及相关的特性:一文读懂物联网 MQTT 协议之基础特性篇,这一篇我们就来实战一番,理论得与实践结合,方能吃透 MQTT。我的那个读者还提到了讲一下 Mosquitto,这是一款开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌.

2021-08-02 00:41:43 7082 23

原创 一文读懂 Spring Bean 的生命周期

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、前言今天我们来说一说 Spring Bean 的生命周期,小伙伴们应该在面试中经常遇到,这是正常现象。因为 Spring Bean 的生命周期是除了 IoC、AOP 几个核心概念之外最重要概念,大家务必拿下。可 Spring 源代码又比较复杂,跟着跟着就不知道跟到哪里去了,不太好拿下呀。这倒是真的,而且网上一上来就各种贴流程源码,对初学者来说是真的一脸懵逼,就像字.

2021-07-18 23:52:34 104258 108

原创 深入浅出 MyBatis 的一级、二级缓存机制

一、MyBatis 缓存缓存就是内存中的数据,常常来自对数据库查询结果的保存。使用缓存,我们可以避免频繁与数据库进行交互,从而提高响应速度。MyBatis 也提供了对缓存的支持,分为一级缓存和二级缓存,来看下下面这张图:一级缓存是 SqlSession 级别的缓存。在操作数据库时需要构造 SqlSession 对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的是 SqlSession 之间的缓存数据区(HashMap)是互相不影响。二级缓存是 Mapper 级别的缓存,多个 S

2021-07-12 21:14:25 1007 8

原创 阿里二面:JVM 的三色标记算法你了解吗?

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、前言不得不说阿里的面试还是挺有质量的,这个问题直接问到了 JVM 的底层算法实现。在说 JVM 的三色标记算法之前,我们先来说下 JVM 对于常见对象存活判定算法与垃圾收集算法。常见对象存活判定算法有引用计数算法和可达性分析算法。 引用计数法会产生循环引用问题,JVM 默认是通过可达性分析算法来判断对象是否存活的。而那些垃圾收集算法:标记-清除、标记-复制、标记-.

2021-06-30 00:03:59 1345 18

原创 阿里二面:Redis 中的 AOF 文件太大了怎么办?

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、前言写这篇文章的目的是来自我的一位粉丝的投稿,说面试阿里被问到了这个问题。不得不说阿里的面试问的都挺有质量,一般的我们只会关注 Redis 的两种持久化方式 RDB 和 AOF。但老周这里盲猜面试的过程肯定也是先从持久化方式问起,然后循循渐进的问到 AOF 文件太大了怎么办?本着知其然知其所以然的态度,老周这里会带你从 RDB 和 AOF 的实现原理、各自的触发方.

2021-06-03 00:07:51 6375 17

原创 我惊了!!!ThreadLocal 源码存在内存泄露的 Bug!!!

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、前言写这篇文章的目的是因为现在网上很多关于 ThreadLocal 的文章,很大一部分都不太准确。比如说:ThreadLocal 内部有个 map,键为线程对象;ThreadLocal 的数据结构是个数组;还有说 ThreadLocal 存在内存泄露,但里面的 get、set 以及 remove 方法能防止 ThreadLocal 内存泄露问题。都是.

2021-05-27 01:17:27 2179 41

原创 Redis中ZSet的底层数据结构跳跃表skiplist,你真的了解吗?

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、前言老周写这篇文章的初衷是这样的,之前项目中有大量使用 Redis 的 ZSet 数据结构来实现各种排行榜的功能。老周以前也写过关于跳表的数据结构,但那是纯数据结构方面来分析的,今天我们就来从跳跃表在 Redis 中的底层实现方向来分析。我们都知道 Redis 有五种常用的数据结构:String、Hash、List、Set 以及 ZSet,其中 ZSet 是 Re.

2021-05-17 01:56:51 4104 42

原创 一文读懂线程池的实现原理

欢迎大家关注我的微信公众号【老周聊架构】,Java后端主流技术栈的原理、源码分析、架构以及各种互联网高并发、高性能、高可用的解决方案。一、前言上个月底群里的一个好朋友向老周提出啥时候分享 ThreadPoolExecutor 解析大全,我说后面会提上日程;然后前些天有读者也反馈说在面试中有被问到线程池,问我啥时候出一篇线程池相关的文章。今天老周就来安排一波线程池,现在很多公司都喜欢问线程池相关的面试题,为什么面试官这么热衷于问线程池相关的面试题呢?因为这是多线程的基础,ThreadPoolExecu.

2021-04-20 01:27:47 10282 34

原创 2w 字长文爆肝 JVM 经典面试题!太顶了!

如果你是中高级程序员,那我相信你一定被面试官问过JVM。下次再被问到JVM,你直接把老周的这篇文章丢给他吧!话不多说,让我们直接进入主题吧。JVM内存结构,常见异常,调优参数,调优工具和命令JVM的理解JVM内存为什么要分成新生代,老年代,持久代。新生代中为什么要分为Eden和Survivor。Minor GC ,Full GC 触发条件如何确定某个对象是“垃圾”?典型的垃圾收集算法常用的垃圾回收器有哪些, 特点是什么当出现了内存溢出,你怎么排错你们线上应用的JVM参数有哪些什么是内存泄

2021-04-12 22:06:32 3164 42

原创 远程调用 Dubbo 与 Feign 的区别

一、相同点Dubbo 与 Feign 都依赖注册中心、负载均衡。二、区别1、协议Dubbo:支持多传输协议(Dubbo、Rmi、http、redis等等),可以根据业务场景选择最佳的方式。非常灵活。默认的Dubbo协议:利用Netty,TCP传输,单一、异步、长连接,适合数据量小、高并发和服务提供者远远少于消费者的场景。Feign:基于Http传输协议,短连接,不适合高并发的访问。2、负载均衡Dubbo:支持4种算法(随机、轮询、活跃度、Hash一致性),而且算法里面引入权重的概

2020-09-23 22:02:21 33661 15

原创 史上最全 SpringBoot 注解详解

一、注解(annotations)列表1、@SpringBootApplication包含了@ComponentScan、@Configuration和@EnableAutoConfiguration注解。其中@ComponentScan让Spring Boot扫描到Configuration类并把它加入到程序上下文。2、@ComponentScan组件扫描,可自动发现和装配一些Bean...

2020-04-20 22:41:45 7635 9

原创 史上最全 Lombok Features 注解详解

文章目录一、@Getter and @Setter二、@ToString三、@EqualsAndHashCode四、@AllArgsConstructor, @RequiredArgsConstructor and @NoArgsConstructor五、@Data六、@Value七、@Builder八、@Accessors九、@Slf4j and @Log4j十、@NonNull十一、@Sync...

2020-04-08 00:39:55 3965 4

原创 spring的controller是单例还是多例,怎么保证并发的安全。

答案:controller默认是单例的,不要使用非静态的成员变量,否则会发生数据逻辑混乱。正因为单例所以不是线程安全的。我们下面来简单的验证下:package com.riemann.springbootdemo.controller;import org.springframework.context.annotation.Scope;import org.springframew...

2019-07-29 23:48:06 26934 27

原创 Proxyee-down的下载与安装教程

这个工具的名字是 proxyee-down,是在 GitHub 上发现的,工具的地址是:https://github.com/proxyee-down-org/proxyee-down下载安装教程下wiki有:https://github.com/proxyee-down-org/proxyee-down/wiki/软件下载与运行本博客Proxyee-down版本为:2.54Proxy...

2019-04-13 00:04:23 24945 24

原创 史上最全BATJ面试题精选附答案

目录JAVA基础JVM知识开源框架知识操作系统多线程TCP与HTTP架构设计与分布式数据结构与算法数据库知识消息队列缓存搜索JAVA基础String,Stringbuffer,StringBuilder的区。ArrayList和LinkedList有什么区别。什么是HashMap?用过哪些Map类,都有什么区别JAVA8的ConcurrentHashMap...

2019-01-17 21:51:03 2143 6

原创 MongoDB 的集群架构与设计

MongoDB 有三种集群架构模式,分别为主从复制副本集(Replica Set)和分片(Sharding)模式。Master-Slaver 是一种主从复制的模式,目前已经不推荐使用。Replica Set 模式取代了 Master-Slaver 模式,是一种互为主从的关系。Replica Set 将数据复制多份保存,不同服务器保存同一份数据,在出现故障时自动切换,实现故障转移,在实际生产中非常实用。

2023-10-24 23:44:55 1490

原创 新一代通信协议—— RSocket

RSocket 是一种二进制字节流传输协议,位于 OSI 模型中的5~6层,底层可以依赖 TCP、WebSocket、Aeron 协议。最初由 Netflix 开发,支持 Reactive Streams。其开发背后的动机是用开销更少的协议取代超文本传输协议(HTTP),HTTP 协议对于许多任务(如微服务通信)来说效率低下。

2023-02-28 23:21:37 2359 1

原创 响应式流的核心机制——背压机制

采用背压机制,消费者会根据自身的处理能力来请求数据,而生产者也会根据消费者的能力来生产数据,从而在两者之间达成一种动态的平衡,确保系统的即时响应性。

2023-01-16 22:57:17 997

原创 Spring 响应式编程,真香!!!

异步非阻塞的福音~

2023-01-09 21:39:12 2057 1

原创 老周的 2022 年终总结

把活着的每一天看作生命的最后一天

2022-12-31 22:33:35 826 1

原创 张益唐111页论文攻克朗道-西格尔零点猜想

10月15日的一个下午,我正在拜读张益唐的《Bounded Gaps Between Primes》论文,前面正看的入迷的时候,突然传来了一个重磅的消息,张益唐已证明朗道-西格尔零点猜想,当时各大自媒体新闻直接炸了,光是素数的有界间距证明了存在无穷组间距小于七千万的相邻素数对就足以名垂青史了,现在又直接攻克朗道-西格尔零点猜想,直接颠覆了我的认知,黎曼猜想被列为世界七大数学难题之一,一百多年前前后后无数的数学家在这条道路前赴后继。

2022-11-08 23:59:35 540

原创 聊聊 Kafka:协调者 GroupCoordinator 源码剖析之 FIND_COORDINATOR

我们来看看是如何寻找负载最小节点的,首先就是取随机数,防止每次都从第一个节点连接,如果判断没有在途的 request 则直接返回该节点,否则取在途 request 最小的节点,如果该节点不存在,则依次取连接的节点、需要重试的节点,如果找到不为 null 的节点则返回该节点,否则返回 null。相同 Consumer Group 的 offset 最终会保存在其中一个分区中,而保存在哪个分区就由上面这段代码来决定,可以看到逻辑很简单,就是取 groupId 的 hashCode,然后对总的分区数取模。

2022-10-24 22:57:28 1235 1

原创 聊聊 K8S:K8S集群搭建实战

手把手系列

2022-10-19 22:11:58 625

原创 深度剖析 Apache EventMesh 云原生分布式事件驱动架构

近年来,随着微服务、云原生和 Serverless 概念的普及以及容器化技术的发展,事件驱动也再次成为热点,引起 IT 界广泛的关注。事件驱动架构是一种用于设计应用的软件架构和模型。对于事件驱动系统而言,事件的捕获、通信、处理和持久保留是解决方案的核心结构。事件驱动架构可以最大程度减少耦合度,很好地扩展与适配不同类型的服务组件,因此是现代化分布式应用架构的理想之选。什么是 EventMesh云原生生态下的事件驱动架构模型EventMesh 架构EventMesh 的相关特性以及应用场景。...

2022-08-08 20:47:49 2755

原创 聊聊 Kafka:协调者 GroupCoordinator 源码剖析之实例化与启动 GroupCoordinator

在聊聊Kafka系列专栏中,我们前面讲了一篇聊聊KafkaConsumer源码解析之Consumer如何加入ConsumerGroup,其实那一篇主要讲的是客户端Consumer加入组请求、加入组响应、同步组请求、同步组响应等操作,我们这一篇主要来讲服务端侧协调者GroupCoordinator处理的请求。服务端处理客户端请求的入口都是KafkaApis类,它会根据不同的请求类型分发给不同的方法处理。...

2022-07-21 21:39:16 713

原创 聊聊 Kafka:Kafka 如何保证一致性

本文从高水位更新机制、副本同步机制以及 Leader Epoch 几个方面去剖析Kafka 是如何保证一致性的~

2022-06-06 22:49:31 5427 1

原创 聊聊 Kafka:Kafka 如何保证可靠性

一、前言在如今的分布式环境时代,任何一款中间件产品,大多都有一套机制去保证高可用的,Kafka 作为一个商业级消息中间件,消息可靠性的重要性可想而知,那 Kafka 如何保证可靠性的呢?本文从 Producer 往 Broker 发送消息、Topic 分区副本以及 Leader 选举几个角度介绍 Kafka 是如何保证可靠性的。二、Producer 往 Broker 发送消息如果我们要往 Kafka 对应的主题发送消息,我们需要通过 Producer 完成。前面我们讲过 Kafka 主题对应了多个分区

2022-05-29 23:03:32 1943 1

原创 聊聊 Kafka:Kafka 消息重复的场景以及最佳实践

一、前言上一篇我们讲了 聊聊 Kafka:Kafka 消息丢失的场景以及最佳实践,这一篇我们来说一说 Kafka 消息重复的场景以及最佳实践。我们下面会从以下两个方面来说一下 Kafka 消息重复的场景以及最佳实践。生产者重复消息消费者重复消息二、Kafka 消息重复的场景2.1 生产者重复消息2.1.1 根本原因生产者发送的消息没有收到 Broker 正确的响应,导致生产者重试。生产者发出一条消息,Broker 落盘以后因为网络等种种原因,发送端得到一个发送失败的响应或者网络中断,

2022-05-05 23:30:21 2918 1

原创 聊聊 Kafka:Kafka 消息丢失的场景以及最佳实践

一、前言大家好,我是老周,有快二十多天没有更新文章了,很多小伙伴一直在催更。先说明下最近的情况,最近项目上线很忙,没有时间写,并且组里有个同事使用 Kafka 不当,导致线上消息丢失,在修复一些线上的数据,人都麻了。事情是这样,有个 Kafka 消费者实例,部署到线上去,消费到了线上的数据,而新版本做了新的逻辑,新版本的业务逻辑与老版本的业务逻辑不兼容,直接导致消费失败,没有进行重试操作,关键还提交了 offset。直接这部分数据没有被业务处理,导致消息丢失,然后紧急修复线上数据。刚好这些天忙完了有空,

2022-05-01 22:52:53 2029 2

原创 腾讯一面:你平时怎么排查并调优慢 SQL 的

一、前言上一篇我们说了 腾讯一面:说一说 MySQL 中索引的底层原理,相信你对索引有个很清晰的认识了,这一篇我们来说一说慢 SQL 的排查以及调优。为啥面试官要问这个问题,其实跟上一篇的索引底层原理有一定关联关系的,一般慢 SQL 很大一部分原因对索引底层原理不够特别了解导致的,比如没建索引、索引失效、索引没满足最左前缀匹配原则导致慢 SQL,像腾讯这样数据量很大的公司,人家肯定有专门的 DBA 去做优化的,面试官考察的主要是你排查问题的能力以及知道索引的底层原理、以及知道优化的方向,不至于让你进来把人

2022-04-11 23:10:29 2648

原创 一文读懂 MySQL Explain 执行计划

一、前言上周老周的一个好朋友让我出一篇教你读懂 SQL 执行计划,和我另一位读者反馈的面试题如何排查慢 SQL 的强相关,索性先出一篇一文读懂 MySQL Explain 执行计划。Explain 执行计划你一定得会看,不然你简历上就别去写什么你会 SQL 调优,不然面试官会觉得,Explain 执行计划你都不会看,那你还 SQL 调啥优啊?SQL 调你吧???开个小玩笑,玩笑归玩笑,重要是真的重要!!!二、Explain 执行计划是什么?什么是执行计划?简而言之,就是 SQL 在数据库中执行时的表现

2022-04-05 23:21:29 3602 2

原创 腾讯一面:说一说 MySQL 中索引的底层原理

一、前言最近有很多读者要我出一些面试题的文章,一般我会给他一个老周整理的电子书,但有些读者反馈回来的面试题我觉得还是蛮经典的,而老周又在写系列的文章,本着对读者负责的态度,我会穿插写几篇我认为比较经典的面试题,让大家对这种经典问题不再是背八股文,而是深入底层原理以及数据结构。后续再碰到这类问题,不管哪个公司问的,你都会得心应手、从容不迫的回答。今天这一篇腾讯的一道面试题:说一说 MySQL 中索引的底层原理,先不管哪个公司,如果老周是面试官,MySQL 这块我很可能也会用这道来考察,因为这可以考察出你对

2022-03-20 22:36:21 2541 2

原创 聊聊 Pulsar: Pulsar 分布式集群搭建

一、集群搭建要求1.1 搭建设计搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、Bookkeeper 集群和 Broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:ZooKeeper 集群(3 个 ZooKeeper 节点组成)Broker 集群(3 个 Pulsar 节点组成)Bookkeeper 集群(也称为 Bookie 集群,3 个 BookKeeper 节点组成)Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独

2022-03-02 23:33:55 2795

原创 聊聊 Pulsar: 在 Linux 环境上搭建 Pulsar

一、环境准备jdk下载地址链接:jdk 1.8,提取码: dv5hpulsar下载地址链接:pulsar2.9.1,提取码: 84891.1 Java 环境为前提1.1.1 上传jdk-8u261-linux-x64.rpm到服务器并安装# 安装命令rpm -ivh jdk-8u261-linux-x64.rpm 1.1.2 配置环境变量# 编辑配置文件,jdk的bin目录到/etc/profile文件,对所有用户的shell有效vim /etc/profile# 生效source

2022-02-19 14:32:14 2489

原创 聊聊 Pulsar: Pulsar 的核心概念与基础架构

一、Pulsar 介绍Apache Pulsar 是 Apache 软件基金会的顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。Pulsar 的关键特性如下:是下一代云原生分布式消息流平台。Pulsar 的单个实例原生支持多个集群,可跨机房在集群间无缝地完成消息复制。极低的发布延迟和端到端延迟。可无缝扩展到超过一百万个 topic。

2022-02-07 00:41:16 3896 2

原创 家里的 Mac 电脑远程控制公司的 Win10 电脑,疫情也不影响办公。

一、VPNVPN 英文全称:Virtual Private Network(虚拟专用网络)。VPN 被定义为通过一个公用互联网络建立一个临时的、安全的连接,是一条穿过混乱的公用网络的安全、稳定隧道,使用这条隧道可以对数据进行几倍加密达到安全使用互联网的目的,广泛使用企业办公当中,虚拟专用网也可以是针对企业内部网的扩展,虚拟专用网可以帮助远程用户、公司分支机构、商业伙伴及供应商同公司的内部网建立可信的安全连接,用于经济有效地连接到商业伙伴和用户的安全外联网虚拟专用网,因此很多办公一族在自己电脑中也需要建立

2022-01-12 00:27:26 2930 2

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除