- 博客(55)
- 收藏
- 关注
原创 Spring Cloud Sleuth 分布式链路追踪入门
本文主要介绍了分布式链路追踪主要思想,以及Spring Cloud Slueth + Zipkin集成实现分布式链路追踪,当然本文只是入门级教程,不涉及Slueth原理相关,文中给的例子仅仅只是Demo,实际项目中,启动类与Controller 类职责要严格区分,不能混在一起,更多Demo 可以查看官网。
2024-12-15 20:01:53
1049
原创 常见限流算法介绍 和 Spring Cloud Sentinel使用方式
通过sentinel组件很容易对相关接口进行限流,只需要配置相应的规则即可,sentinel提供了Sentinel Dashboard,在控制台调整规则的参数,无需重启应用即可生效。使用方式支持注解方式 @SentinelResource,可以做到对业务代码无入侵。
2024-12-03 19:12:38
762
1
原创 Spring Cloud Nacos配置管理
Nacos 作为配置中心,实现了配置的集中管理,当配置更新时,不需要重启应用立即生效,同时配置的修改具有版本管理功能,便于审计和回滚等操作。此外对于一些敏感信息放到配置中心,通过权限控制增加安全性。
2024-11-29 19:25:04
1685
原创 Spring Cloud 它是谁?它能做什么?
本文简单介绍了Spring Cloud是什么,它能解决什么问题,在这两个问题指引下,再学习Spring Cloud 相信更加游刃有余。
2024-11-26 19:58:48
933
原创 如何基于Netty手写简单的Tomcat?
Spring MVC 处理业务逻辑的,我们感知不到它的存在,平常我们只需要写Controller ,这是因为DispatcherServlet拦截了所有的请求。SpringBoot 提倡零配置,使用注解方式是Spring MVC 的主流。Spring 容器启动时会扫描相关类,并且j解析类上、方法上注解。类上URL作为基础路径和方法上URL拼接作为最终URL ,而对应方法即最终URL的处理器。相关的映射关系也被称为handler mappings。
2024-11-19 20:17:51
937
原创 字节序 | 不同语言之间通信失败的深刻教训
本文主要通常不同语言间通信的例子,讲述字节序的重要性,尤其在不同语言之间通信,需要正确处理字节序。Netty ByteBuf很轻松实现字节序转换,当然NIO ByteBuffer 同样也可以处理。另外相信很多读者也有疑惑,char 也是多字节,字符串为什么没有字节序的问题呢?感兴趣的自行查阅资料。
2024-11-15 20:44:47
622
原创 使用Netty 如何解决半包粘包?
对于上面的消息体我们可以基于ByteToMessageDecoder 实现,下面代码能正确的处理半包和粘包问题。如果两个if 判断 如果长度不够则"半包"问题,直接return 等待缓冲区有足够数据。相同代码如果我们继承ChannelInboundHandlerAdapter,发现无法处理半包,这是为什么呢?本文介绍了常见的几种解决半包、粘包问题,以及自定义处理器解决半包问题。并且揭示Netty 基于ByteToMessageDecoder能正确处理半包的奥秘。
2024-11-12 21:31:25
1172
原创 Netty 编码器 & 解码器 正确使用姿势
本文主要介绍了MessageToByteEncoder 和 ByteToMessageDecoder 重要的抽象类有了这两个基础类,理论上我们可以实现一切编码、转码工作。当然netty内置了许多编码器和解码器,尤其在处理TCP半包、粘包问题值得我们借鉴。另外通过本文,详细读者也看到责任链顺序的重要性。
2024-11-08 19:42:24
777
原创 Netty ByteBuf 分配 | 池化复用 、直接内存
在IO密集型业务场景下,可能涉及大量ByteBuf分配,这时我们需要考虑会不会产生OOM会不会出现频繁GC会不会内存泄露
2024-11-06 20:18:51
1022
原创 Netty 强大的 ByteBuf
ByteBuf 确实比 NIO 中 ByteBuffer 功能强大,相信读者也感受到了,灵活掌握ByteBuf使用,可以轻松应对很多场景。
2024-11-04 20:41:59
920
原创 Netty 常见组件介绍
Netty 组件看上去很多,实际上我们通常只需要关注 消息解码、编码和读写事件的处理,这也是选择Netty 原因,简单同时兼顾性能。
2024-11-03 19:52:12
694
原创 Netty 01 从EchoServer 开始抛砖引玉
Netty 服务端开发可能涉及下面这些类,对第一次接触Netty的同学一下接触这么多类,千万别它震慑,其实Netty Server端或者Client代码总体比较固定,我们几乎只需要编写自己的。配置 EventLoopGroup可以理解为线程池,一个接受客户端连接,一个处理IO读写请求配置Channel为NioServerSocketChannel如果基于传统阻塞IO,可以使用OioServerSocketChannel配置消息处理器责任链。
2024-11-01 20:20:44
341
原创 Java NIO2 异步IO支持
相对而言这是最重要的功能,异步 IO 操作使得在处理大量 IO 任务时可以充分利用系统资源,NIO2 主要增加了 文件 和 Socket异步IO支持。提供了多种方法来解析、转换和查询路径信息。从 Java 7 在之前的NIO基础上,它提供了异步 IO 操作、文件系统访问增强等诸多功能。Files 类提供了大量的静态方法来执行文件操作,比如 读取、写入、复制、删除、移动。分别对应客户端和服务端的异步套接字通信,支持非阻塞模式下的连接建立、数据发送与接收。Path 接口代表了文件系统的路径。
2024-10-30 19:04:16
335
原创 Java NIO (二) 分散读取/聚集写入 | Pipe | Channel Transfer
如果需要在两个通道之间传输数据,并且其中一个通道是文件(FileChannel),传统方式是伪代码如下,数据需要在两个通道之间复制, NIO FileChannel 提供了transferTo()和transferFrom()方法是用于两个通道之间高效数据传输的重要操作。聚集写入将分散准备的数据整合后统一输出,对于构建复杂消息或者按照特定协议格式发送数据很有帮助,可以减少数据整合的复杂性。对于复杂的数据结构时,可以将不同类型的数据直接读入不同的缓冲区,然后分别处理不同的缓冲区。使用transferTo()
2024-10-28 19:39:10
464
原创 Java NIO 应知应会 (一)
NIO(New IO),New 相对传统的阻塞IO而言,Java 1.4版本开始引入的一个新的I/O AP,它提供了一种不同于传统Java IO和网络API的编程模型。NIO是面向缓存区,这使得它可以更好地支持非阻塞I/O操作,在网络编程方面尤其在处理大量连接时更加高效。NIO经常被误解为,即非阻塞IO,这是不准确的,因为NIO提供了多种模式,包括阻塞和非阻塞。本文主要内容包含NIO 核心组件。
2024-10-27 17:40:03
1027
原创 Redis 内存回收策略小结
Redis中尽量存放一些热点数据,切勿所有数据放入Redis中,Redis虽然可以持久化数据,但Redis操作主要在内存中操作,数据会加载到内存,切勿把Redis当成Mysql之类,所有数据都放到Redis。
2024-10-26 19:34:06
563
原创 Redis 高级数据结构 Bitmap HyperLogLog Geo
HyperLogLog 的结果是概率性的,因此可能会有一定的误差。它非常适合于大规模数据集执行基数估计,且不需要获取具体的数据。
2024-10-25 21:50:31
461
原创 Redis 五种数据类型详解
时间与空间兼顾Redis 底层使用不仅仅考虑效率(时间复杂度),同时也兼顾空间复杂度,因此同一种数据类型,Redis底层编码因存储内容,大小等因素不同,会采用不同的编码进行存储。合理使用批量命令Redis 基本是内存操作,因此性能很高,通常多个操作耗时主要在网络传输上,因此redis支持一些批量命令,如mget ,mset 可以有效减少网络传输时间,由于redis 是当线程模型,批量命令也不能滥用,一次批量键值对也不能过多,否则会阻塞其他命令。大Key问题。
2024-10-23 20:31:18
918
2
原创 Flink 大数据实战演练02 实现篇
本文通过一个完整的例子展示了完整的操作流程。当然如果一些操作您还不熟悉,请查看以往文章或者查看官方文档。聚合操作介绍watermark与时间介绍窗口介绍kafka相关学习。
2024-10-22 19:05:48
1455
原创 Flink 大数据实战演练01
数据来源 kaggle 官网有丰富的数据,可以选择感兴趣的进行处理数据总量 1.6G , 总记录 1615940原始数据中包含23列,以下是重要字段介绍字段描述示例值Job IdExperience工作年限资历M.Tech薪资范围99Klocation位置DouglasCountry国家Work Type工作类型Intern公司规模26801岗位发布日期2022-04-24限于篇幅本文主要确定总体技术架构,技术选型,下期继续实现细节和踩坑记录总结。
2024-10-21 18:42:49
963
原创 Flink SideOutput 数据分流处理
分流处理对于一个复杂的数据流可能包含多种属性,我们需要对这个数据流进行多维度分析,因此我们可能需要根据数据的某些属性将其分流到不同的处理路径。例如,一个数字流我们可以按照 正数、负数、奇数、偶数、质数等进行分流处理。使用Side Output可以轻松实现这种分流,而无需多次复制数据流,从而提高处理效率。异常值捕获:实际的业务数据中通常包含一些不合法的数据(如空值、数据过大的异常值等)。使用Side Output可以将这些异常数据分流,然后对异常数据进行处理分析。
2024-10-18 19:19:48
558
原创 终于搞懂了Flink WaterMark 解决数据乱序延迟利器
watermark通常基于事件时间来生成。它是一个时间戳,能确保窗口能够按照事件时间的顺序被触发,watermark携带一个单调递增的时间戳,watermark(t) 表示小于等于t 的数据不会来。因此当Watermark 时间 >= 窗口结束时间 就可以触发窗口计算。
2024-10-17 19:27:51
1029
原创 Flink 窗口触发器Triggers
实现一个CountTrigger 窗口元素数量达到阈值时,触发计算@Overridecount++;// 触发窗口并清除计数器count = 0;@Override@Override// 其他方法(onEventTime, onProcessingTime, onMerge, clear)可以留空或实现特定的逻辑@Overridecount = 0L;// 应用全局窗口和自定义触发器。
2024-10-16 19:45:30
950
原创 Flink 06 聚合操作入门学习,真不难
本文介绍了如何使用ProcessWindowFunction/AggregateFunction 完成一些聚合操作。通过对比两端代码,相信聪明的你已经体会到两者差异。再回到开头的问题,相信已经不是问题,信手拈来了。
2024-10-15 19:21:37
1227
原创 Flink05 Windows 操作轻松应对复杂的场景
本期Flink Windows 相关操作apply/union/join/collect/CoMap/CoFlatMap。介绍了各自的使用场景,并给出简单的例子。关于Flink 操作还有很多,期待我们一起持续学习。
2024-10-14 18:51:02
1255
原创 Flink 04 | 窗口介绍 - 无界数据流的核心
Flink中Windows(窗口)是处理无界数据流的核心。因为无界数据集是不断增长的,无法直接对整个数据集进行操作。窗口将数据流分成有限大小的Buckets,我们可以在这些Buckets上应用计算。本文档重点介绍如何在 Flink 中选择合适的"Windows",以及程序员如何最大限度地利用其提供的功能。本文介绍了 几种类型的Windows的使用方式以及使用场景,Windows 还有许多操作用法,会持续输出。
2024-10-11 18:59:22
565
原创 Flink 03 | 数据流基本操作
本文介绍了Flink 数据流基本操作Map/Filter/FlatMap/KeyBy/Reduce 的用法以及使用场景,并通过一个完整的例子展示 这些基本操作同时使用,完成数据分析过程。对于Flink 一些其他高级操作,会持续更新中。
2024-10-04 20:10:21
590
原创 Flink 02 | 英雄莫问出处 Flink丰富多彩的数据源
除了基本数据源外Flink 内置了许多数据源连接器:如Kafka Source、Elasticsearch Source等等,以满足不同的业务场景,比如Kafka 数据源.build();这是一个基础的数据源接口,用于定义非并行数据源或并行度为 1的数据源run(SourceContextctx) throws Exception:在这个方法中实现数据的生成逻辑,并通过 ctx.collect 发送数据。cancel():用于停止数据源的生成操作。当作业取消或出现异常时会调用此方法。
2024-09-26 19:38:33
1002
原创 大数据 flink 01 | 从零环境搭建 简单Demo 运行
Flink是一个开源的流处理和批处理框架,它能够处理无界和有界的数据流,具有高吞吐量、低延迟和容错性等特点实时数据处理、数据分析、机器学习、事件驱动等。流处理是一种针对实时数据流进行连续处理的技术。它的数据通常是无界,数据以持续不断的流的形式到达。批处理是一种将大量数据集合在一起进行统一处理的技术。在批处理中,首先要收集存储数据,批处理通常用于处理历史数据或离线数据。
2024-09-25 20:17:03
843
原创 kafka (至关重要)多副本相关一些关键概念
本文介绍了kafka 中几个概念,这几个概念对理解kafka 多副本之间保证数据一致性、可靠性至关重要。kafka 所有分区的消息都是保存的日志中,读者可以带着下面两个问题阅读本文1. 新消息该往哪写?2. 如何衡量副本的同步进度3. 选举时依据什么选出最佳Leader副本是相对于分区的,每个分区都有自己的副本,并且这些副本分布在不同Broker上。
2024-09-24 18:56:33
397
原创 kafka 消费者线程安全问题详细探讨
因为通常拉取消息比较快,消息处理比较耗时,由于消息处理不涉及KafkaConsumer 相关API 操作,因此不存在线程安全问题。,如果业务处理很快则建议让业务处理逻辑放到 IO线程中执行,这样避免线程上下文切换影响性能。MessageOnlyDispatcher:只有请求和响应消息派发到线程池,其它连接断开、心跳等消息直接在 IO 线程上执行。ExecutionDispatcher:只把请求消息派发到线程池,响应和其它连接、断开、心跳等消息直接在 IO 线程上执行。
2024-09-23 20:03:13
1478
原创 kafka 事务 - 没错消息队列也有事务
妄想一篇文章且看后不动手就掌握的不现实,没人做不到。一些原理来源书本、官网等其他网络资料。源码例子自己本地跑过。如果您已经会了,真诚地欢迎您指出文中不足甚至错误,也希望您能温故知新。关注一起交流心得。如果您接触不久,也可以关注一起。
2024-09-22 19:15:49
458
原创 kafka 消息位移提交几种方式:消息重复消息、消息丢失的关键
一般情况我们消息位移自动提交就可以满足我们大部分场景,当然也有场景需要控制消息位移提交,需要我们在可靠性与性能之间做取舍,自动位移提交代码稍微复杂点,需要处理好位移提交失败的情况。
2024-09-21 18:40:32
1152
原创 kafka 超详细的消息订阅与消息消费几种方式
消费者订阅几种方式订阅多个主题按正则表达式订阅消息消费几种方式按分区消费按主题消费不区分笔者建议一开始学习Kafka最好不要用SpringBoot 集成方式,因为SpringBoot推崇用注解方式,比如等,就可以直接消费,这样不能直接接触kafka-client一些api, 且SpringBoot 给我们提供了很多默认配置,我们几乎零配置也可以使用,实际上kafka很多配置很重要的,不容忽视。
2024-09-19 19:07:55
1128
原创 kafka 生产者重要配置——可靠性与吞吐量能否兼得?
kafka生产者配置还有许多,并且很多配置之间都是有关联的,除了生产者相关配置,还有ConsumerBrokerTopic等配置。只有掌握这些配置才能最大程度提升kafka性能同时兼顾可靠性以上就是我个人的理解喜欢的一起关注交流学习更多配置可以查看官方文档kafka官方文档。
2024-09-17 19:30:00
771
原创 kafka 生产者拦截器
生产者拦截器接口包含三个方法onSend 方法可以对消息进行定制化修改onAcknowledgement 在消息被应答或者发送失败时执行该方法在IO线程执行,所以不要执行一些耗时操作,会影响消息投递速度close 用于执行一些资源释放的工作该生产者拦截器给消息添加个包含版本号信息的Header,配置生产者属性使其生效@Override@Override@Override@Override> map) {生产者拦截器还是比较简单,相应的还有消费者拦截器。
2024-09-16 19:30:00
490
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人