自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(371)
  • 资源 (6)
  • 收藏
  • 关注

原创 java版本doris删库跑路

【代码】java版本doris删库跑路。

2024-08-09 16:35:59 114

原创 gbk,ucs-2转中文

【代码】gbk,ucs-2转中文。

2024-07-04 15:45:47 141

原创 关于springboot创建kafkaTopic

【代码】关于springboot创建kafkaTopic。

2024-06-24 16:57:07 598

原创 揭开神秘的“位移主题”面纱 no.16

用户不能修改,也就是说你不能随意地向这个主题写消息,因为一旦你写入的消息不满足Kafka规定的格式,那么Kafka内部无法成功解析,就会造成Broker的崩溃。事实上,Kafka Consumer有API帮你提交位移,也就是向位移主题写消息。你千万不要自己写个Producer随意向该主题发送消息。你可能会好奇,这个主题存的到底是什么格式的消息呢?所谓的消息格式,你可以简单地理解为是一个KV对。Key和Value分别表示消息的键值和消息体,在Kafka中它们就是字节数组而已。

2024-05-29 14:57:31 598

原创 消费者组到底是什么?no.15

Kafka的消费者组。消费者组,即Consumer Group,应该算是Kafka比较有亮点的设计了。那么何谓Consumer Group呢?。既然是一个组,那么组内必然可以有多个消费者或消费者实例(Consumer Instance),它们共享一个公共的ID,这个ID被称为Group ID。组内的所有消费者协调在一起来消费订阅主题(Subscribed Topics)的所有分区(Partition)。当然,每个分区只能由同一个消费者组内的一个Consumer实例来消费。

2024-05-29 14:56:15 703

原创 消费者组到底是什么?no.15

Kafka的消费者组。消费者组,即Consumer Group,应该算是Kafka比较有亮点的设计了。那么何谓Consumer Group呢?。既然是一个组,那么组内必然可以有多个消费者或消费者实例(Consumer Instance),它们共享一个公共的ID,这个ID被称为Group ID。组内的所有消费者协调在一起来消费订阅主题(Subscribed Topics)的所有分区(Partition)。当然,每个分区只能由同一个消费者组内的一个Consumer实例来消费。

2024-05-29 14:55:39 861

原创 幂等生产者和事务生产者是一回事吗?no.14

幂等”这个词原是数学领域中的概念,指的是某些操作或函数能够被执行多次,但每次得到的结果都是不变的。我来举几个简单的例子说明一下。比如在乘法运算中,让数字乘以1就是一个幂等操作,因为不管你执行多少次这样的运算,结果都是相同的。再比如,取整函数(floor和ceiling)是幂等函数,那么运行1次floor(3.4)和100次floor(3.4),结果是一样的,都是3。相反地,让一个数加1这个操作就不是幂等的,因为执行一次和执行多次的结果必然不同。

2024-05-29 14:53:18 962

原创 Java生产者是如何管理TCP连接的?no.13

试想一下,在一个有着1000台Broker的集群中,你的Producer可能只会与其中的3~5台Broker长期通信,但是Producer启动后依次创建与这1000台Broker的TCP连接。值得注意的是,在第二种方式中,TCP连接是在Broker端被关闭的,但其实这个TCP连接的发起方是客户端,因此在TCP看来,这属于被动关闭的场景,即passive close。更严谨地说,作为一个基于报文的协议,TCP能够被用于多路复用连接场景的前提是,上层的应用协议(比如HTTP)允许发送多条消息。

2024-05-29 11:22:42 596

原创 客户端都有哪些不常见但是很高级的功能?no.12

而Flume中的拦截器也是同理,它们插入的逻辑可以是修改待发送的消息,也可以是创建新的消息,甚至是丢弃消息。在上面的消费者拦截器中,我们在真正消费一批消息前首先更新了它们的总延时,方法就是用当前的时钟时间减去封装在消息中的创建时间,然后累计得到这批消息总的端到端处理延时并更新到Redis中。从技术上来说,我们可以在客户端程序中增加这样的统计逻辑,但是对于那些将Kafka作为企业级基础架构的公司来说,在应用代码中编写统一的监控逻辑其实是很难的,毕竟这东西非常灵活,不太可能提前确定好所有的计算逻辑。

2024-05-29 11:17:18 505

原创 无消息丢失配置怎么实现?no.11

我们先从什么是消息丢失开始说起,明确了Kafka持久化保证的责任边界,随后以这个规则为标尺衡量了一些常见的数据丢失场景,最后通过分析这些场景,我给出了Kafka无消息丢失的“最佳实践”。在这里我要提醒你一下,单个Consumer程序使用多线程来消费消息说起来容易,写成代码却异常困难,因为你很难正确地处理位移的更新,也就是说避免无消费消息丢失很简单,但极易出现消息被消费了多次的情况。什么是已提交的消息?总结一下,Kafka是能做到不丢失消息的,只不过这些消息必须是已提交的消息,而且还要满足一定的条件。

2024-05-29 11:16:02 469

原创 生产者压缩算法面面观no.10

说起压缩(compression),我相信你一定不会感到陌生。它秉承了用时间去换空间的经典trade-off思想,具体来说就是用CPU时间去换磁盘空间或网络I/O传输量,希望以较小的CPU开销带来更少的磁盘占用或更少的网络I/O传输。在Kafka中,压缩也是用来做这件事的。今天我就来跟你分享一下Kafka中压缩的那些事儿。

2024-05-28 09:30:43 982

原创 生产者消息分区机制原理剖析no.9

我们在使用Apache Kafka生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上。比如很多公司使用Kafka收集应用服务器的日志数据,这种数据都是很多的,特别是对于那种大批量机器组成的集群环境,每分钟产生的日志量都能以GB数,因此如何将这么大的数据量均匀地分配到Kafka的各个Broker上,就成为一个非常重要的问题。今天我就来和你说说Kafka生产者如何实现这个需求,我会以Java API为例进行分析,但实际上其他语言的实现逻辑也是类似的。

2024-05-28 09:25:12 823

原创 最最最重要的集群参数配置(下)no.8

今天我们继续来聊那些重要的Kafka集群配置,下半部分主要是Topic级别参数、JVM参数以及操作系统参数的设置。在上一期中,我们讨论了Broker端参数设置的一些法则,但其实Kafka也支持为不同的Topic设置不同的参数值。当前最新的2.2版本总共提供了大约25个Topic级别的参数,当然我们也不必全部了解它们的作用,这里我挑出了一些最关键的参数,你一定要把它们掌握清楚。除了Topic级别的参数,我今天还会给出一些重要的JVM参数和操作系统参数,正确设置这些参数是搭建高性能Kafka集群的关键因素。

2024-05-28 09:23:20 849

原创 最最最重要的集群参数配置(上)no.7

我希望通过两期内容把这些重要的配置讲清楚。严格来说这些配置并不单单指Kafka服务器端的配置,其中既有Broker端参数,也有主题(后面我用我们更熟悉的Topic表示)级别的参数、JVM端参数和操作系统级别的参数。需要你注意的是,这里所说的Broker端参数也被称为静态参数(Static Configs)。我会在专栏后面介绍与静态参数相对应的动态参数。所谓静态参数,是指你必须在Kafka的配置文件server.properties中进行设置的参数,不管你是新增、修改还是删除。

2024-05-27 14:38:23 836

原创 Kafka线上集群部署方案怎么做?no.6

最后是社区的支持度。这一点虽然不是什么明显的差别,但如果不了解的话可能比前两个因素对你的影响更大。简单来说就是,社区目前对Windows平台上发现的Kafka Bug不做任何承诺。虽然口头上依然保证尽力去解决,但根据我的经验,Windows上的Bug一般是不会修复的。

2024-05-27 14:37:10 871

原创 我应该选择哪种Kafka?no.4

Kafka不再是一个单纯的消息引擎系统,而是能够实现精确一次(Exactly-once)处理语义的实时流处理平台。你可能听说过Apache Storm、Apache Spark Streaming抑或是Apache Flink,它们在大规模流处理领域可都是响当当的名字。令人高兴的是,Kafka经过这么长时间的不断迭代,现在已经能够稍稍比肩这些框架了。我在这里使用了“稍稍”这个字眼,一方面想表达Kafka社区对于这些框架心存敬意;

2024-05-27 14:35:42 874

原创 记录一次安装k8s初始化失败

如果要修改xfs ftyoe 要修改设置,可是如果修改这个设计影响系统,所以暂时启动这个服务器。,报错说明containerd 没有启动,我们看下containerd 状态。这里说明系统不支持overlayfs。可以看error里面是由错误的。从docker 官方文档上面来看。

2024-05-27 14:32:04 1572

原创 Kafka只是消息引擎系统吗?no.3

因为当这些框架与外部消息引擎系统结合使用时,它们无法影响到外部系统的处理语义,所以如果你搭建了一套环境使得Spark或Flink从Kafka读取消息之后进行有状态的数据计算,最后再写回Kafka,那么你只能保证在Spark或Flink内部,这条消息对于状态的影响只有一次。但我们也欣喜地看到,随着在Kafka峰会上各路大神们的鼎力宣传,如今利用Kafka构建流处理平台的案例层出不穷,而了解并有意愿使用Kafka Streams的厂商也是越来越多,因此我个人对于Kafka流处理平台的前景也是非常乐观的。

2024-05-27 09:23:44 297

原创 一篇文章带你快速搞定Kafka术语no.2

在Kafka的世界中有很多概念和术语是需要你提前理解并熟练掌握的,这对于后面你深入学习Kafka各种功能和特性将大有裨益。下面我来盘点一下Kafka的各种术语。在专栏的第一期我说过Kafka属于分布式的消息引擎系统,它的主要功能是提供一套完备的消息发布与订阅解决方案。在Kafka中,发布订阅的对象是主题(Topic),你可以为每个业务、每个应用甚至是每类数据都创建专属的主题。

2024-05-27 09:22:21 926

原创 消息引擎系统ABC.no.01

这个简单的流程中就可能包含多个子服务,比如点击订阅按钮会调用订单系统生成对应的订单,而处理该订单会依次调用下游的多个子系统服务 ,比如调用支付宝和微信支付的接口、查询你的登录信息、验证课程信息等。但是,一旦有了消息引擎,它能够有效地对抗上游的流量冲击,真正做到将上游的“峰”填满到“谷”中,避免了流量的震荡。这些都是很酷的办法。我个人认为并不是很恰当,因为它片面强调了消息主体的作用,而忽视了这类系统引以为豪的消息传递属性,就像引擎一样,具备某种能量转换传输的能力,所以我觉得翻译成消息引擎反倒更加贴切。

2024-05-27 09:20:49 407

原创 如何为社交feed场景设计缓存体系?no.35

Feed 流场景分析Feed 流是很多移动互联网系统的重要一环,如微博、微信朋友圈、QQ 好友动态、头条/抖音信息流等。虽然这些产品形态各不相同,但业务处理逻辑却大体相同。用户日常的“刷刷刷”,就是在获取 Feed 流,这也是 Feed 流的一个最重要应用场景。用户刷新获取 Feed 流的过程,对于服务后端,就是一个获取用户感兴趣的 Feed,并对 Feed 进行过滤、动态组装的过程。接下来,我将以微博为例,介绍用户在发出刷新 Feed 流的请求后,服务后端是如何进行处理的。获取 Feed 流操作是

2024-05-24 11:15:32 806

原创 一个典型的分布式缓存系统是什么样的?no.32

使用公有云,主要是由微博的业务特点决定的,在突发事件或热点事件发生时,很容易形成流量洪峰,读写 TPS 大幅增加,利用公有云可以快速、低成本的扩展系统,大幅增加系统处理能力。更新方式不同,主要是因为 Redis 作为缓存类型的业务数据,在不同区或者不同 IDC 的热点数据不同,如果采用主从复制,部署从库的 IDC,会出现热数据无法进入缓存,同时冷数据无法淘汰的问题,因为从库的淘汰也要依赖主库进行。方案 2,对每个业务分配一个业务端口,不同业务访问自己的端口,Proxy 会根据端口确定业务类型。

2024-05-24 11:02:13 666

原创 Redis是如何处理容易超时的系统调用的?no.25

Redis 在运行过程中,不可避免的会产生一些运行慢的、容易引发阻塞的任务,如将内核中的文件缓冲同步到磁盘中、关闭文件,都会引发短时阻塞,还有一些大 key,如一些元素数高达万级或更多的聚合类元素,在删除时,由于所有元素需要逐一释放回收,整个过程耗时也会比较长。而 Redis 的核心处理线程是单进程单线程模型,所有命令的接受与处理、数据淘汰等都在主线程中进行,这些任务处理速度非常快。如果核心单线程还要处理那些慢任务,在处理期间,势必会阻塞用户的正常请求,导致服务卡顿。

2024-05-24 10:36:32 285

原创 Redis崩溃后,如何进行数据恢复的?no.24

本课时我们主要学习通过 RDB、AOF、混合存储等数据持久化方案来解决如何进行数据恢复的问题。Redis 持久化是一个将内存数据转储到磁盘的过程。Redis 目前支持 RDB、AOF,以及混合存储三种模式。

2024-05-23 16:49:07 987

原创 Redis是如何淘汰key的?no.23

对于 lfu,要选择使用频率最小的 key,为了沿用 evictionPool 的 idle 概念,Redis 在计算 lfu 的 Idle 时,采用 255 减去使用频率相对值,从而确保 Idle 最大的 key 是使用次数最小的 key,计算 N 个 key 的 Idle 值后,插入 evictionPool,最后选择 Idle 最大,即使用频率最小的 key,进行淘汰。这种策略适合的业务场景是,需要淘汰的key带有过期时间,且有冷热区分,从而可以淘汰最久没有访问的key。

2024-05-23 16:40:05 1068

原创 如何深入理解、应用及扩展 Twemproxy?no.15

如下图所示,它可以封装资源池的分布及 hash 规则,解决后端部分节点异常后的探测和重连问题,让 client 访问尽可能简单,同时资源变更时,只要在 Twemproxy 变更即可,不用更新数以万计的 client,让资源变更更轻量。以 Memcached 访问为例,将业务的 Memcached 资源部署好之后,然后将 Mc 资源列表、访问方式等设到 YAML 文件的配置项,然后启动 Twemproxy,业务端就可以通过访问 Twemproxy ,来获取后端资源的数据了。至此一个请求的处理彻底完成。

2024-05-23 14:46:48 1215

原创 Leetcode42题:接雨水

解释:上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。输入:height = [0,1,0,2,1,0,1,3,2,1,2,1]输入:height = [4,2,0,3,2,5]

2024-05-22 16:35:42 711

原创 Hot Key和Big Key引发的问题怎么应对?no.6

你可以通过提前熟悉 Cache 的经典问题,提前构建防御措施, 避免大量 key 同时失效,避免不存在 key 访问的穿透,减少大 key、热 key 的缓存失效,对热 key 进行分流。如果业务中这种大 key 很多,而这种 key 被大量访问,缓存组件的网卡、带宽很容易被打满,也会导致较多的大 key 慢查询。同时由于大 key 一旦穿透到 DB,加载耗时很大,所以可以对这些大 key 进行特殊照顾,比如设置较长的过期时间,比如缓存内部在淘汰 key 时,同等条件下,尽量不淘汰这些大 key。

2024-05-21 20:43:44 988

原创 缓存数据不一致和并发竞争怎么处理no.5

如下图所示,在缓存机器的带宽被打满,或者机房网络出现波动时,缓存更新失败,新数据没有写入缓存,就会导致缓存和 DB 的数据不一致。据并发竞争,主要是由于多个进程/线程中,有大量并发请求获取相同的数据,而这个数据 key 因为正好过期、被剔除等各种原因在缓存中不存在,这些进程/线程之间没有任何协调,然后一起并发查询 DB,请求那个相同的 key,最终导致 DB 压力大增,如下图。数据并发竞争,是指在高并发访问场景,一旦缓存访问没有找到数据,大量请求就会并发查询 DB,导致 DB 压力大增的现象。

2024-05-21 20:34:44 948

原创 缓存失效、穿透和雪崩问题怎么处理no.4

在一般情况下,一致性 Hash 分布+rehash 策略可以很好得运行,但在较大的流量洪峰到临之时,如果大流量 key 比较集中,正好在某 1~2 个缓存节点,很容易将这些缓存节点的内存、网卡过载,缓存节点异常 Crash,然后这些异常节点下线,这些大流量 key 请求又被 rehash 到其他缓存节点,进而导致其他缓存节点也被过载 Crash,缓存异常持续扩散,最终导致整个缓存体系异常,无法对外提供服务。还比如,很多业务,在部署新 IDC 或新业务上线时,会进行缓存预热,也会一次性加载大批热数据。

2024-05-21 20:28:10 810

原创 设计缓存架构时需要考量哪些因素no.3

key 的数量也是一个重要考虑因素。在设计架构缓存时,你首先要选定缓存组件,比如要用 Local-Cache,还是 Redis、Memcached、Pika 等开源缓存组件,如果业务缓存需求比较特殊,你还要考虑是直接定制开发一个新的缓存组件,还是对开源缓存进行二次开发,来满足业务需要。平均缓存穿透加载时间在某些业务场景下也很重要,对于一些缓存穿透后,加载时间特别长或者需要复杂计算的数据,而且访问量还比较大的业务数据,要配置更多容量,维持更高的命中率,从而减少穿透到 DB 的概率,来确保整个系统的访问性能。

2024-05-21 19:56:09 1023

原创 如何根据业务来选择缓存模式和组件no.2

缓存的基本思想、优势、代价以及读写模式,接下来一起看下互联网企业常用的缓存有哪些分类。

2024-05-21 19:46:38 467

原创 业务数据访问性能太低怎么办no.1

缓存1

2024-05-21 19:32:52 752

原创 ApiPost设置预执行脚本获取token,并设置给请求头

这个地方获取字段为。

2024-03-08 17:04:04 941

原创 Tabby-全网最详细讲解

Tabby是一个无限可定制的跨平台终端应用程序,适用于local shells、serial、SSH和Telnet的连接。Tabby是基于TypeScript开发的终端模拟器,可用于Linux、Windows和Mac OS系统。Tabby (前身是 Terminus) 是一个可高度配置的终端模拟器和 SSH 或串口客户端,支持 Windows,macOS 和 Linux集成 SSH,Telnet 客户端和连接管理器集成串行终端定制主题和配色方案完全可配置的快捷键和多键快捷键分体式窗格。

2024-03-04 17:34:48 930

原创 logbak日志单独打印(方法层级)

前几天朋友在群里问,怎么针对方法打印打印日志,不是针对类。

2024-02-21 15:34:31 901

原创 SpringCloud Gateway 网关的请求体body的读取和修改

getway需要多次对body 进行操作,需要对body 进行缓存。对header 重新封装,否则接口层会卡死,request 无限大。新建顶层filter,对body 进行缓存。在子节点层获取body。重写获取body方法。

2023-11-01 10:47:12 3216 2

原创 shell脚本初始化nacos

shell 脚本部署nacos

2023-09-26 16:06:57 329

原创 linux关于支付宝微信回调地址白名单ip

【代码】linux关于支付宝微信回调地址白名单ip。

2023-04-26 09:58:45 1041 2

原创 拒绝多种if else,(springboot版本实现)

在我们工作当中,如果写多个if else 看起来是比较费事的,毕竟如果一段代码中出现很长代码段,就已经很不容易维护。

2023-04-24 17:25:28 227

cfssl-资源名称不得少于十一字

https://pkg.cfssl.org/R1.2/cfssl_linux-amd64 https://pkg.cfssl.org/R1.2/cfssljson_linux-amd64 https://pkg.cfssl.org/R1.2/cfssl-certinfo_linux-amd64

2022-11-18

total最后参考版本src.7z

total最后参考版本

2021-11-19

totallist最终版1_vue_test.7z

totallist最终版1_vue_test.7z

2021-11-12

vue_test_tolist纯净版.zip

练习tolist 纯净版文件

2021-11-05

20211104-node-v12.14.1-x64.msi.zip

node12版本

2021-11-04

2021年9月1日103807vue_dev_tools.7z

vue_dev_tools chrome使用

2021-09-01

空空如也

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

TA关注的人

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