- 博客(219)
- 资源 (5)
- 问答 (3)
- 收藏
- 关注
原创 我用 Codex 做周报自动化,第一件事是防止它胡写
摘要 本文探讨了如何利用Loop Engineering技术自动化周报撰写流程。作者通过分析自身手动撰写周报的痛点,提出了基于5个核心组件(Automations、Skills、Plugins、Sub-agents和Memory)的系统设计方案。文章详细介绍了每个组件的具体实现方法,包括设置定时任务、定义周报模板、连接外部数据源、构建审核流程等。同时分享了实践中遇到的三个常见问题:静默失败、数据幻觉和过度自动化,并给出了相应的解决方案。作者建议在实施自动化前评估任务的重复性、可验证性和维护成本,强调第一版应
2026-06-17 14:42:22
232
原创 让 3 个 AI 一起写公众号:一篇 Hermes 多 Agent 实操
上游 Agent 给下游传一句"参考上一份草稿",下游 Agent 经常接错文件、读错段落。约定:context 字段必须是文件路径 + 字段名(如),别传自然语言摘要。结构化的好处是出错时你能 grep 到具体哪一步挂了。
2026-06-09 16:38:03
213
原创 从零学习Kafka:调优
最后我们来总结一下本文的内容,我们首先明确了 Kafka 调优的目标,即在高吞吐、低延迟、高可靠三点中找到平衡。接着对调优方法进行了分层,从上到下分别是应用程序层、框架层、JVM 层和操作系统层,通常越靠上调优效果越好。这四层中我们重点介绍了框架层的调优方法。
2026-05-19 11:06:03
441
原创 从零学习Kafka:消费者组重平衡
本文介绍了Kafka消费者组及其重平衡机制。消费者组是Kafka提供的可扩展、容错的消费机制,支持负载均衡和故障转移。重平衡是自动调度机制,在组员变动、主题变更等情况下触发,会经历准备、同步等状态流转。新版本通过增量协作重平衡减少了STW时间。为避免非预期重平衡,可从参数调优(调整心跳和poll间隔)、代码健壮性(异常处理和优雅关闭)及架构设计(设置固定ID)三方面优化。合理配置能显著提升Kafka集群的稳定性。
2026-05-18 15:59:55
461
原创 从零学习Kafka:幂等与事务
本文介绍了Kafka的可靠性机制,重点分析了如何实现精确一次(Exactly Once)的消息传递。Kafka默认支持最少一次(At Least Once)保证,通过生产者重试机制实现。要实现精确一次,需要结合幂等性、事务和消费者隔离级别三个机制:1)幂等性通过Producer ID和Sequence Number防止消息重复;2)事务通过两阶段提交保证跨分区原子性;3)消费者设置read_committed隔离级别确保只读取已提交消息。文章详细阐述了事务的实现流程,包括事务协调器、控制消息等关键组件的作用
2026-05-12 09:49:43
403
原创 从零学习Kafka:生产者压缩
Kafka的压缩机制主要在Producer端进行,Broker端保持压缩状态,Consumer端解压。压缩针对消息批次而非单条消息,可通过设置compression.type参数启用。Broker端重压缩会消耗CPU资源,主要发生在压缩算法不一致、消息格式版本转换和Broker注入时间戳三种场景。Kafka支持GZIP、Snappy、LZ4和Zstd四种压缩算法,各有优缺点:GZIP压缩率高但速度慢,LZ4速度快但压缩率中等,Zstd是较均衡的选择。合理选择压缩算法和参数配置可优化性能,同时应避免不必要的重
2026-05-11 11:18:43
410
原创 从零学习Kafka:生产者分区机制
本文从Kafka客户端视角介绍了生产者分区机制的核心逻辑。重点讲解了五种分区策略:按Key分配策略(通过Hash确保相同Key消息分配到同一分区)、轮询策略(平均分配但影响吞吐量)、粘性策略(提高批处理效率)、随机策略(已弃用)和自定义策略。同时介绍了两个关键参数:控制批次大小的batch.size和影响等待时间的linger.ms。文章为理解Kafka生产者如何高效组织消息提供了基础,为后续学习消息压缩等性能优化技术做了铺垫。
2026-04-28 16:12:53
370
原创 从零学习Kafka:ZooKeeper vs KRaft
Kafka从依赖ZooKeeper转向KRaft模式是架构上的重大变革。ZooKeeper模式存在元数据同步瓶颈、一致性风险(如双Controller问题)和运维复杂度高等问题。KRaft模式通过内部Raft协议选举Controller,将元数据存储在内部Topic中,实现权力中心统一,避免了ZooKeeper的局限性。KRaft支持混合和隔离两种部署方式,具有更快的恢复时间和更高的分区扩展性(支持百万级分区)。这一变革使Kafka摆脱外部依赖,提升了系统稳定性和运维效率,但ZooKeeper在其他场景仍有
2026-04-20 22:22:32
607
原创 从零学习Kafka:认证机制
摘要:本文详细介绍了Kafka的认证机制,包括SSL/TLS、SASL和OAuthBearer三种方式。SSL/TLS基于证书认证,安全性高但维护成本大;SASL提供多种认证机制,如PLAIN、SCRAM和GSSAPI,适用于不同场景;OAuthBearer基于OAuth2框架,适合云原生环境。文章对比了各认证方式的安全性、配置难度和适用场景,并提供了Broker端和客户端的配置参数说明。最后通过实战演示了如何配置SASL/SCRAM认证机制,包括JAAS文件准备、服务端配置修改、用户创建及测试验证。
2026-04-15 11:00:17
523
原创 从零学习Kafka:位移与高水位
本文深入解析了Kafka的核心概念LEO(Log End Offset)和HW(High Watermark)。LEO表示副本写入下一条消息的位移值,而HW定义了消息可见性,决定哪些消息可被消费。文章详细阐述了Leader副本和Follower副本如何通过LEO和HW实现数据同步,包括存储结构和更新流程。同时介绍了Kafka的位移主题(__consumer_offsets)机制,说明位移如何从ZooKeeper迁移到内部Topic存储,并采用日志压缩防止数据膨胀。全文系统性地梳理了Kafka位移管理的核心原
2026-04-09 10:13:04
459
原创 从零学习Kafka:副本机制
本文介绍了Kafka的副本机制及其重要性。副本是分区层级的定义,通过多副本部署确保集群稳定性。Kafka采用ISR机制维护副本同步,Leader副本对外服务,Follower副本异步同步数据。通过参数replica.lag.time.max.ms判断副本同步状态,默认30秒未同步则移出ISR集合。为防止数据丢失,需配置acks=all和min.insync.replicas≥2,确保ISR副本与Leader数据一致。副本机制为Kafka提供了高可用保障。
2026-03-18 12:08:09
481
原创 从零学习Kafka:数据存储
摘要:本文详细解析了Kafka底层数据存储机制。通过搭建单机Kafka集群并写入测试数据,观察到数据存储在/tmp/kraft-combined-logs目录下,包含三类文件:集群元数据(meta.properties、bootstrap.checkpoint等)、数据目录(以topic+partitionId命名)和检查点文件。重点分析了partition存储结构中的核心三文件:.log(消息数据)、.index(偏移量索引)和.timeindex(时间戳索引),以及.snapshot、leader-ep
2026-02-09 23:43:31
889
原创 从零学习Kafka:配置参数
本文详细介绍了Kafka各组件的重要配置参数。Broker端包括数据存储目录、监听配置、集群稳定性等关键参数;Topic级别参数可覆盖Broker配置,实现灵活管理;Producer端着重于消息发送可靠性、批处理和压缩等配置;Consumer端则关注消费组、位移管理和拉取控制等参数。这些参数对Kafka的性能调优、稳定运行和数据可靠性至关重要,合理配置可显著提升生产环境表现。文章还提醒要注意不同版本间默认值的差异,并建议根据实际业务场景调整参数。
2026-02-02 21:39:05
1105
1
原创 从零学习Kafka:集群架构和基本概念
本文介绍了Apache Kafka的基本概念和核心功能。Kafka是一个分布式事件流平台,支持发布/订阅和点对点两种消息模型,主要用于流量缓冲和数据同步。文章详细解释了Kafka的核心概念,包括Topic、Producer、Consumer、Consumer Group、Partition、Replica、Broker等组件及其交互关系。Kafka通过分区和副本机制实现高可用性和横向扩展,利用日志存储和定期清理机制管理数据。这些特性使Kafka成为处理大规模数据流的可靠平台。
2026-01-27 21:42:32
1108
2
原创 Flink源码阅读:Kafka Connector
本文分析了Flink Kafka Connector的实现原理。首先介绍了Flink自定义Source/Sink的三层架构:Metadata层处理表元数据,Planning层通过工厂类创建DynamicTableSource/Sink,Runtime层实现与连接器的交互。接着详细解读了KafkaDynamicTableFactory的实现,包括配置解析、格式解码等核心功能。重点剖析了Source端的创建流程,涉及分区发现、启动模式、并行度设置等关键参数处理。
2026-01-20 21:59:49
1047
1
原创 Flink源码阅读:Mailbox线程模型
Flink 通过 Mailbox 线程模型取代传统的 checkpointLock 机制,采用单线程加阻塞队列方式处理事件,确保线程安全。Mailbox 将事件封装为 Mail 对象存入队列,由单线程顺序执行,解决了锁竞争和代码可读性问题。核心组件包括 TaskMailbox(存储 Mail 队列)、MailboxProcessor(处理循环)和 MailboxExecutor(提交事件)。该模型优化了事件处理流程,支持优先级控制和 yield 机制避免死锁,提升了 Flink 的并发性能和调试便利性。
2026-01-15 21:23:10
711
原创 Flink源码阅读:JobManager的HA机制
Flink 通过高可用机制解决 JobManager 单点问题,支持 ZooKeeper 和 Kubernetes 两种 HA 模式。核心组件包括 Leader 选举、服务发现和信息存储服务。基于 ZooKeeper 的实现通过 LeaderLatch 机制选举 Leader,最小 ID 节点当选,并利用 TreeCache 监听节点变更。选举成功后新 Leader 会获取旧 Leader 存储在公共存储中的信息,确保集群稳定运行。
2026-01-12 20:38:58
1060
原创 Flink源码阅读:Netty通信
本文摘要: Flink 网络通信模块基于 Netty 实现,主要涉及 NettyServer 和 NettyClient 的初始化过程。初始化在 TaskManager 启动时完成,通过 ShuffleEnvironment 创建 NettyConnectionManager,其中包含核心组件:服务端、客户端、缓冲池和 Netty 协议处理器。
2026-01-09 19:04:37
1082
原创 Flink源码阅读:Task数据交互
本文梳理了Flink中Task数据交互的源码实现。数据输出方面,介绍了RecordWriterOutput、RecordWriter等核心组件,详细分析了从StreamMap到BufferWritingResultPartition的数据写入流程,包括内存申请机制。数据输入方面,讲解了InputGate和InputChannel的概念,以及从StreamTask到StreamOneInputProcessor的数据读取过程。
2026-01-05 19:09:12
1160
原创 Flink源码阅读:双流操作
本文梳理了 Flink 双流操作的三种实现方式:Window Join、Interval Join 和 CoGroup。重点分析了 Window Join 和 CoGroup 的源码实现,其中 Window Join 底层通过 CoGroup 处理,使用两层遍历实现数据关联。CoGroup 则将两个流合并后创建窗口流进行处理。文章通过代码示例展示了核心调用链路和关键实现逻辑,帮助理解 Flink 多流 Join 的内部机制。
2025-12-30 20:10:01
1071
原创 Flink源码阅读:窗口
本文深入分析了Flink窗口机制的源码实现,重点剖析了Keyed Window和Non-Keyed Window两种类型。文章首先介绍了窗口的基本用法和分类,然后详细解读了WindowAssigner如何确定消息所属窗口,以TumblingEventTimeWindows为例展示了窗口分配逻辑。接着分析了Trigger触发机制,包括onElement、onProcessingTime、onEventTime等回调函数的作用,以及TriggerResult枚举类对窗口计算的控制逻辑。
2025-12-25 22:29:59
809
原创 Flink源码阅读:Watermark机制
本文分析了Flink中Watermark的源码实现,主要包含三个部分:1) Watermark的定义,它是一个带有时间戳的StreamElement;2) Watermark的生成过程,通过assignTimestampsAndWatermarks方法初始化,创建TimestampsAndWatermarksOperator并设置定时器周期性发送;3) 下游处理机制,获取上游最小Watermark并向下游广播。文章通过关键代码片段和调用链路图,详细阐述了Watermark在Flink中的实现原理和处理流程。
2025-12-22 22:38:51
1104
原创 Flink源码阅读:Checkpoint机制(下)
前面我们了解到在方法中会创建四个 Future,用来支持不同类型的状态写入。if (null!} else {我们主要关心 ManagedState,ManagedState 都是调用方法来写入数据的,下面具体看 KeyedState 和 OperatorState 的具体实现。本文我们重点梳理了 KeyedState 数据写入的代码。其主要步骤包括:同步拷贝状态数据的引用,创建 Checkpoint 输出流并完成 Checkpoint 持久化,最后返回元信息结果。
2025-12-21 22:24:19
1058
原创 Flink源码阅读:Checkpoint机制(上)
本文深入分析了Flink的Checkpoint机制源码实现,从JobManager端触发流程、TaskManager端执行流程到非Source节点处理流程进行了详细梳理。重点解析了CheckpointCoordinator的触发逻辑、Barrier消息广播、状态异步写入及上报机制,并区分了EXACTLY_ONCE和AT_LEAST_ONCE两种模式的不同处理方式。通过源码分析揭示了Flink如何通过Checkpoint实现可靠的容错机制,为理解Flink的容错原理提供了深入的技术细节。
2025-12-20 21:54:54
1112
1
原创 Flink源码阅读:状态管理
本文从源码层面分析了Flink状态管理的实现机制。首先介绍了State的分类和使用方式,包括Keyed State和Operator State的获取方法。接着详细讲解了State Backend的三种存储类型及其创建过程,重点剖析了StreamTask中keyedStateBackend的创建逻辑,包括KeyGroupRange计算和状态恢复流程。
2025-12-17 19:18:07
741
原创 Flink源码阅读:集群启动
摘要:本文介绍了Flink集群的启动流程,重点分析了JobManager的启动过程。通过分析启动脚本和核心代码,详细展示了StandaloneSessionClusterEntrypoint如何加载配置并启动集群,包括初始化RPC服务、HA服务、BlobServer等关键组件。
2025-12-16 20:50:13
993
原创 Flink源码阅读:如何生成ExecutionGraph
Flink ExecutionGraph 执行过程解析 本文详细介绍了Flink中ExecutionGraph的执行过程。
2025-12-15 22:46:14
1005
原创 Flink源码阅读:如何生成JobGraph
Flink执行图转换:从StreamGraph到JobGraph的优化过程 摘要:本文详细分析了Flink中StreamGraph向JobGraph的转换机制。StreamGraph作为高层逻辑图,JobGraph则是优化后的执行图,主要区别包括:1)StreamGraph对应API逻辑,JobGraph侧重执行优化;2)JobGraph通过算子链优化提高性能。转换过程核心是StreamingJobGraphGenerator.createJobGraph方法,包括预验证、链化操作符、设置并行度等步骤。
2025-12-14 20:24:38
1007
原创 Flink源码阅读:如何生成StreamGraph
Flink程序的执行流程通过四种图结构实现转换:StreamGraph、JobGraph、ExecutionGraph和Physical Graph。其中StreamGraph是根据用户代码生成的初始拓扑结构。代码分析从StreamExecutionEnvironment开始,重点研究了DataStream转换过程。
2025-12-14 20:22:07
1464
原创 Flink学习笔记:反压
本文介绍了Flink中的反压机制及其监控方法。反压是流式系统中下游对上游的数据处理反馈机制,当上游生产速度超过下游消费速度时触发。Flink数据传输分三种情况:同线程直接共享内存、本地跨线程通过Buffer交互、远程跨节点通过网络传输。反压监控通过Web UI显示状态(OK/LOW/HIGH),分别对应不同的反压程度。文章详细分析了本地和远程场景下反压的感知原理,为Flink运维提供了重要参考。
2025-12-12 22:38:55
701
原创 Flink学习笔记:状态后端
Flink状态存储机制解析:介绍了两种状态后端(HashMapStateBackend和EmbeddedRocksDBStateBackend)的存储方式、特点及适用场景,以及Checkpoint存储类型(JobManager和FileSystem)的配置方法。详细说明了三种组合配置方式(MemoryStateBackend、FsStateBackend、RocksDBStateBackend)及其实现代码,并解释了状态序列化/反序列化过程。帮助开发者根据应用需求选择合适的状态存储方案。
2025-12-11 21:57:21
1299
原创 Flink学习笔记:如何做容错
本文我们介绍了 Flink 是如何做容错的,分别介绍了 Checkpoint 和 Savepoint,以及它们之间的区别。本文多次提到了 Checkpoint 和 Savepoint 依赖的稳定存储,我会在下一篇文章进行详细的介绍。
2025-12-10 22:09:04
1087
原创 Flink学习笔记:状态类型和应用
Flink的容错机制和状态管理是其核心优势之一。文章首先区分了无状态和有状态计算,重点介绍了Flink的两种状态类型:Raw State(需开发者自行管理)和Managed State(由Flink Runtime管理)。Managed State又分为Keyed State(基于键值对)和Operator State(绑定到算子实例),详细说明了ValueState、ListState等具体状态类型的使用方法。
2025-12-09 22:42:23
689
原创 Flink学习笔记:多流 Join
本文介绍了 Flink 中实现流数据 Join 的两种主要方法:Window Join 和 Interval Join。Window Join 通过窗口机制对相同 key 的元素进行关联,分为滚动窗口、滑动窗口和会话窗口三种类型。Interval Join 则基于事件时间范围进行关联,支持设置上下偏移量。此外,文章还介绍了使用 CoGroup 实现 left join 的方法。
2025-12-08 22:08:47
780
原创 Flink学习笔记:窗口
Flink窗口机制是实时数据处理的核心概念,主要分为Keyed Window和Non-Keyed Window两类。根据数据划分依据可分为时间窗口和计数窗口,按规则又分为滚动窗口、滑动窗口、会话窗口和全局窗口四种类型。时间窗口最常用,其中滑动窗口以固定步长滑动,允许元素跨窗口计算;滚动窗口是滑动窗口的特例,窗口间无重叠;会话窗口根据数据间隔动态决定窗口大小;全局窗口则处理所有数据。每种窗口类型都提供了灵活的API配置选项,支持不同业务场景的实时计算需求。
2025-12-06 00:58:42
1149
原创 Flink学习笔记:时间与Watermark
本文摘要: 本文重点介绍了Flink流处理中的两个核心概念:时间属性和Watermark机制。首先阐述了Flink支持的三种时间属性:事件时间(EventTime)、处理时间(ProcessTime)和摄入时间(IngestionTime),并通过图示说明了它们的区别。然后详细讲解了Watermark的工作原理,包括其定义、作用以及处理迟到数据的三种方法。
2025-12-04 23:28:56
1368
原创 遇见ZooKeeper:初识
0. 什么是ZooKeeperZooKeeper 是一个开源的分布式,它的设计目标是将那些复杂且容易出错的分布式协同服务封装起来,抽象出一个高效可靠的原语集,并以一系列简单的接口提供个用户使用。ZooKeeper 有几大特征:易用ZooKeeper 的理解和使用成本都很低,它提供的是一种层级式的命名空间,这一点和标准的文件系统类似。可靠ZooKeeper 服务可以支持集群模式,并且能够轻松扩展,客户端可以连接到任意一个服务器,都能够获得服务。有序ZooKeeper 的节点是可以保证有序的。每
2021-02-22 23:29:57
417
原创 哲少荐书:鞋狗
很久没来荐书了,主要原因是最近读到的值得推荐的书比较少(其实是偷懒了,读书少了)。还好春节假期来临,也趁着难得的假期时间读完了一本书——《鞋狗》。这是一本读完就想要推荐给大家的书(没错,我就是刚刚读完就来推荐了)。提到《鞋狗》相信还有些朋友不太熟悉,但是提到耐克,相信大家一定都知道。即使没有买过耐克的东西,也一定在商场看到过耐克的线下门店。而《鞋狗》这本书就是耐克的创始人菲尔·奈特的亲笔自传。这本书讲述了耐克“从0到1”的过程,书中讲述了菲尔·奈特在面对合作伙伴背叛,开户行翻脸,权利的压迫等问题时是如
2021-02-18 23:04:59
616
原创 Elasticsearch从入门到放弃:浅谈算分
今天来聊一个 Elasticsearch 的另一个关键概念——相关性算分。在查询 API 的结果中,我们经常会看到 _score 这个字段,它就是用来表示相关性算分的字段,而相关性就是描述一个文档和查询语句的匹配程度。打分的本质其实就是排序,Elasticsearch 会把最符合用户需求的文档排在最前面。在 Elasticsearch 5.0 之前,相关性算分算法采用的是 TF-IDF 算法,而在5.0之后采用的是 BM 25 算法。听到这也许你会比较疑惑,想知道这两个算法到底是怎么样的。别急,下面我们
2021-01-27 00:18:44
452
IntelliJ idea Web项目配置问题(JDBC驱动注册失败)
2017-07-07
Ubuntu安装Mysql启动出错
2016-11-20
为什么在VC中正常,用gcc编译生成文件运行就不正常
2015-04-27
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅