Kafka 如何保证消息的可靠性

数据可靠性的保证 副本数据同步策略 Kafka 选择了第二种方案,原因如下: 同样为了容忍 n 台节点的故障,第一种方案需要 2n+1 个副本,而第二种方案只需要 n+1个副本,而 Kafka 的每个分区都有大量的数据,第一种方案会造成大量数据的冗余。 虽然第二种方案的网...

阅读更多

Kafka 分区

Events、Streams、Topics 在深入 Partition 之前,我们先看几个更高层次的概念,以及它们与 Partition 的联系。 Event(事件)代表过去发生的一个事实。简单理解就是一条消息、一条记录。另外Event 是不可变的,但是很活跃,经常从一个地方流向另一个地方。 Stream ...

阅读更多

如何用策略模式消除满屏的if-else

前言 最近在迁接口的过程中遇到一个直播列表页关注Tab的接口,需要根据不同的直播状态对关注的主播进行展示,老接口把所有的直播状态都写到一起了,首先判断该主播的直播状态(直播中/预告中/未开播等),然后执行不同的处理逻辑。 if (input.getType() == 0) { // 直播中主播的处理逻辑 ...

阅读更多

Spring Bean的生命周期

Bean生命周期的四大阶段 实例化 -> 属性赋值 -> 初始化 -> 销毁 Spring Bean的生命周期只有这四个阶段,把这四个阶段和每个阶段对应的扩展点糅合在一起虽然没有问题,但是这样非常凌乱,难以记忆。要彻底搞清楚Spring的生命周期,首先要把这四个阶段牢牢记住。实例化和...

阅读更多

动态代理及其实现原理

代理模式概述 代理模式介绍 代理模式是一种比较好的理解的设计模式。简单来说就是我们使用代理对象来代替对真实对象的访问,这样就可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能(开闭原则: 对扩展开放,对修改关闭)。 代理模式的主要作用是扩展目标对象的功能,比如说在目标对象的某个方...

阅读更多

IOC容器的启动过程

IOC 概述 Spring IOC是一个容器,用于生成和管理Bean的实例,以及实例之间的依赖关系,然后注入相关的依赖。这里我们可以把IOC容器想象成一个餐馆。我们去餐馆点菜的话,不需要关心菜的生成过程,不需要关心菜的原材料从哪里来。我们只需要最终做好的菜。这里的菜就是我们的需要的Bean。不同的菜对应不同的B...

阅读更多

ES查询优化

Filesystem Cache 你往 es 里写的数据,实际上都写到磁盘文件里去了,查询的时候,操作系统会将磁盘文件里的数据自动缓存到 filesystem cache 里面去。ES读写数据的过程 es 的搜索引擎严重依赖于底层的 filesystem cache,你如果给 filesystem cache...

阅读更多

MySQL与ES之间的数据一致性问题

前言 为什么我们要将数据从 MySQL 实时同步到 ES ,本质是什么?相对于数据去规范化的其他几种方案,数据迁移同步方式存在以下几个优点,也是其成为目前业界主流方式的原因: 稳定性好:迁移同步对主数据库的操作主要是进行数据和日志的顺序读取,同时并发小,对主数据库稳定性影响较小(较多的下游订阅可能在网络...

阅读更多