Kafka 核心技术
文章平均质量分 93
Kafka 核心技术
_Rye_
左手代码右手诗
一行代码一行诗
展开
-
结束语 | 以梦为马,莫负韶华!
比如我们在专栏前面谈到的分区概念,分区在分布式系统设计中早就不是什么新鲜的概念了,早在上世纪六七十年代,就已经有行业专家在研究分区数据库的实现问题了。你千万不要小看理论的价值,毕竟,列宁说过:“没有革命的理论,就没有革命的运动。他山之石,可以攻玉,书籍和专栏的最大作用就在于,当你遇到岔路口时,它们能够帮助你快速地识别前进中的已知路障,让你少走弯路,更快地实现目标。要知道,很多技术大家之所以成为技术大家,不仅仅是因为理论掌握得很牢固,填过的“坑”多,更重要的是,他们不重复犯错。等,但我更想说的,还是。原创 2024-05-08 11:38:09 · 255 阅读 · 0 评论 -
搭建开发环境、阅读源码方法、经典学习资料大揭秘
今天,我们来聊点儿不一样的。总结了 3 个讨论热度很高的话题,现在一一来为你“揭秘”。1. 如何搭建 Kafka 开发环境?很多人对于编译和调试 Kafka 饶有兴致,却苦于无从下手。今天就完整地演示一遍搭建 Kafka 开发环境的过程。2. 如何阅读 Kafka 源码?曾经在专栏第 1 讲提到过我自己阅读 Kafka 源码的经历,后来我收到很多留言,问我是如何阅读的,今天,就跟你分享一些阅读 Kafka 源代码的比较好的法则或者技巧。3. Kafka 的学习资料。原创 2024-05-08 10:36:35 · 902 阅读 · 0 评论 -
42 | Kafka Streams在金融领域的应用
今天要和你分享的主题是:Kafka Streams 在金融领域的应用。原创 2024-05-08 09:52:17 · 821 阅读 · 0 评论 -
41 | Kafka Streams DSL开发实例
在上一讲中,我们提到流处理平台是专门处理无限数据集的引擎。就 Kafka Streams 而言,它仅仅是一个客户端库。所谓的 Kafka Streams 应用,就是调用了 Streams API 的普通 Java 应用程序。只不过在 Kafka Streams 中,流处理逻辑是用拓扑来表征的。一个拓扑结构本质上是一个有向无环图(DAG),它由多个处理节点(Node)和连接节点的多条边组成,如下图所示:图中的节点也称为处理单元或 Processor,它封装了具体的事件处理逻辑。原创 2024-05-07 18:17:36 · 861 阅读 · 0 评论 -
40 | Kafka Streams与其他流处理平台的差异在哪里?
首先,我们有必要了解一下流处理平台的概念。流处理平台(Streaming System)是处理无限数据集(Unbounded Dataset)的数据处理引擎,而流处理是与批处理(Batch Processing)相对应的。所谓的无限数据,是指数据永远没有尽头。流处理平台是专门处理这种数据集的系统或框架。当然,这并不是说批处理系统不能处理这种无限数据集,只是通常情况下,它更擅长处理有限数据集(Bounded Dataset)。那流处理和批处理究竟该如何区分呢?原创 2024-05-07 17:59:49 · 995 阅读 · 0 评论 -
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
今天要和你分享的主题是:从 0 搭建基于 Kafka 的企业级实时日志流处理平台。简单来说,我们要实现一些大数据组件的组合,就如同玩乐高玩具一样,把它们“插”在一起,“拼”成一个更大一点的玩具。在任何一个企业中,服务器每天都会产生很多的日志数据。这些数据内容非常丰富,包含了我们的以及。实时分析这些数据,能够帮助我们更快地洞察潜在的趋势,从而有针对性地做出决策。今天,我们就使用 Kafka 搭建一个这样的平台。原创 2024-05-07 17:47:38 · 989 阅读 · 0 评论 -
38 | 调优Kafka,你做到了吗?
今天要和你分享的主题是:如何调优 Kafka。原创 2024-05-07 17:16:58 · 1034 阅读 · 0 评论 -
37 | 主流的Kafka监控框架
今天要和你分享的主题是:那些主流的 Kafka 监控框架。在上一讲中,我们重点讨论了如何监控 Kafka 集群,主要是侧重于讨论监控原理和监控方法。今天,我们来聊聊具体的监控工具或监控框架。令人有些遗憾的是,Kafka 社区似乎一直没有在监控框架方面投入太多的精力。目前,Kafka 的新功能提议已超过 500 个,但没有一个提议是有关监控框架的。当然,Kafka 的确提供了超多的 JMX 指标,只是,单独查看这些 JMX 指标往往不是很方便,我们还是要依赖于框架统一地提供性能监控。原创 2024-05-07 16:46:18 · 1243 阅读 · 0 评论 -
36 | 你应该怎么监控Kafka?
今天要和你分享的主题是:如何监控 Kafka。监控 Kafka,历来都是个老大难的问题。无论是在我维护的微信公众号,还是 Kafka QQ 群里面,大家问得最多的问题,一定是 Kafka 的监控。大家提问的内容看似五花八门,但真正想了解的,其实都是监控这点事,也就是我应该监控什么,怎么监控。那么今天,我们就来详细聊聊这件事。我个人认为,和头疼医头、脚疼医脚的问题类似,在监控 Kafka 时,如果我们只监控 Broker 的话,就难免以偏概全。原创 2024-05-07 16:15:53 · 1092 阅读 · 0 评论 -
35 | 跨集群备份解决方案MirrorMaker
从本质上说,MirrorMaker 就是一个消费者 + 生产者的程序。消费者负责从源集群(Source Cluster)消费数据,生产者负责向目标集群(Target Cluster)发送消息。整个镜像流程如下图所示:MirrorMaker 连接的源集群和目标集群,会实时同步消息。当然,你不要认为你只能使用一套 MirrorMaker 来连接上下游集群。事实上,很多用户会部署多套集群,用于实现不同的目的。我们来看看下面这张图。图中部署了三套集群:左边的源集群负责主要的业务处理;原创 2024-05-07 15:20:42 · 1099 阅读 · 0 评论 -
34 | 云环境下的授权该怎么做?
我们在上一讲中花了不少时间讨论 Kafka 的认证机制,今天我们来看看 Kafka 的授权机制(Authorization)。所谓授权,一般是指对与信息安全或计算机安全相关的资源授予访问权限,特别是存取控制。具体到权限模型,常见的有四种。ACL:Access-Control List,访问控制列表。RBAC:Role-Based Access Control,基于角色的权限控制。ABAC:Attribute-Based Access Control,基于属性的权限控制。原创 2024-05-07 15:04:42 · 636 阅读 · 0 评论 -
33 | Kafka认证机制用哪家?
所谓认证,又称“验证”“鉴权”,英文是 authentication,是指通过一定的手段,完成对用户身份的确认。认证的主要目的是确认当前声称为某种身份的用户确实是所声称的用户。在计算机领域,经常和认证搞混的一个术语就是授权,英文是 authorization。授权一般是指对信息安全或计算机安全相关的资源定义与授予相应的访问权限。举个简单的例子来区分下两者:认证要解决的是你要证明你是谁的问题,授权要解决的则是你能做什么的问题。在 Kafka 中,认证和授权是两套独立的安全配置。原创 2024-05-07 14:21:40 · 959 阅读 · 0 评论 -
32 | KafkaAdminClient:Kafka的运维利器
今天要和你分享的主题是:Kafka 的运维利器 KafkaAdminClient。原创 2024-05-07 10:28:08 · 1147 阅读 · 0 评论 -
31 | 常见工具脚本大汇总
今天要跟你分享的主题是:Kafka 常见的脚本汇总。原创 2024-05-07 09:57:10 · 970 阅读 · 0 评论 -
30 | 怎么重设消费者组位移?
今天要跟你分享的主题是:如何重设消费者组位移。原创 2024-05-07 09:10:26 · 861 阅读 · 0 评论 -
29 | Kafka动态配置了解下?
在开始今天的分享之前,我们先来复习一下设置 Kafka 参数,特别是 Broker 端参数的方法。在 Kafka 安装目录的 config 路径下,有个 server.properties 文件。通常情况下,我们会指定这个文件的路径来启动 Broker。如果要设置 Broker 端的任何参数,我们必须在这个文件中显式地增加一行对应的配置,之后启动 Broker 进程,令参数生效。我们常见的做法是,一次性设置好所有参数之后,再启动 Broker。当后面需要变更任何参数时,我们必须重启 Broker。原创 2024-05-06 17:59:30 · 703 阅读 · 0 评论 -
28 | 主题管理知多少?
今天想和你讨论一下 Kafka 中的主题管理,包括日常的主题管理、特殊主题的管理与运维以及常见的主题错误处理。原创 2024-05-06 17:47:43 · 840 阅读 · 0 评论 -
27 | 关于高水位和Leader Epoch的讨论
首先,我们要明确一下基本的定义:什么是高水位?或者说什么是水位?水位一词多用于流式处理领域,比如,Spark Streaming 或 Flink 框架中都有水位的概念。教科书中关于水位的经典定义通常是这样的:在时刻 T,任意创建时间(Event Time)为 T’,且 T’≤T 的所有事件都已经到达或被观测到,那么 T 就被定义为水位。原创 2024-05-06 16:03:47 · 774 阅读 · 0 评论 -
26 | 你一定不能错过的Kafka控制器
今天要和你分享的主题是:Kafka 中的控制器组件。。集群中任意一台 Broker 都能充当控制器的角色,但是,在运行过程中,只能有一个 Broker 成为控制器,行使其管理和协调的职责。换句话说,每个正常运转的 Kafka 集群,在任意时刻都有且只有一个控制器。官网上有个名为 activeController 的 JMX 指标,可以帮助我们实时监控控制器的存活状态。这个 JMX 指标非常关键,你在实际运维操作过程中,一定要实时查看这个指标的值。下面,我们就来详细说说控制器的原理和内部运行机制。原创 2024-05-06 15:31:11 · 864 阅读 · 0 评论 -
25 | 消费者组重平衡全流程解析
今天要和你分享的主题是:消费者组重平衡全流程解析。之前我们聊到过消费者组的重平衡流程,它的作用是让组内所有的消费者实例就消费哪些主题分区达成一致。重平衡需要借助 Kafka Broker 端的 Coordinator 组件,在 Coordinator 的帮助下完成整个消费者组的分区重分配。今天我们就来详细说说这个流程。先提示一下,会以 Kafka 2.3 版本的源代码开启今天的讲述。在分享的过程中,对于旧版本的设计差异,也会显式地说明。原创 2024-05-06 11:23:12 · 954 阅读 · 0 评论 -
24 | 请求是怎么被处理的?
今天要和你分享的主题是:Kafka 请求是怎么被处理的。无论是 Kafka 客户端还是 Broker 端,它们之间的交互都是通过“请求 / 响应”的方式完成的。比如,客户端会通过网络发送消息生产请求给 Broker,而 Broker 处理完成后,会发送对应的响应给到客户端。Apache Kafka 自己定义了一组请求协议,用于实现各种各样的交互操作。比如常见的 PRODUCE 请求是用于生产消息的,FETCH 请求是用于消费消息的,METADATA 请求是用于请求 Kafka 集群元数据信息的。原创 2024-04-30 17:51:35 · 978 阅读 · 0 评论 -
23 | Kafka副本机制详解
在讨论具体的副本机制之前,我们先花一点时间明确一下副本的含义。我们之前谈到过,Kafka 是有主题概念的,而每个主题又进一步划分成若干个分区。副本的概念实际上是在分区层级下定义的,每个分区配置有若干个副本。所谓副本(Replica),本质就是一个只能追加写消息的提交日志。根据 Kafka 副本机制的定义,同一个分区下的所有副本保存有相同的消息序列,这些副本分散保存在不同的 Broker 上,从而能够对抗部分 Broker 宕机带来的数据不可用。原创 2024-04-30 17:21:42 · 1249 阅读 · 0 评论 -
22 | 消费者组消费进度监控都怎么实现?
今天要跟你分享的主题是:消费者组消费进度监控如何实现。对于 Kafka 消费者来说,最重要的事情就是监控它们的消费进度了,或者说是监控它们消费的滞后程度。这个滞后程度有个专门的名称:消费者 Lag 或 Consumer Lag。。比方说,Kafka 生产者向某主题成功生产了 100 万条消息,你的消费者当前消费了 80 万条消息,那么我们就说你的消费者滞后了 20 万条消息,即 Lag 等于 20 万。原创 2024-04-30 17:15:21 · 1014 阅读 · 0 评论 -
21 | Java 消费者是如何管理TCP连接的?
今天我要和你分享的主题是:Kafka 的 Java 消费者是如何管理 TCP 连接的。在专栏第 13 讲中,我们专门聊过“Java是如何管理 TCP 连接资源的”这个话题,你应该还有印象吧?今天算是它的姊妹篇,我们一起来研究下 Kafka 的 Java管理 TCP 或 Socket 资源的机制。只有完成了今天的讨论,我们才算是对 Kafka 客户端的 TCP 连接管理机制有了全面的了解。和之前一样,我今天会无差别地混用 TCP 和 Socket 两个术语。原创 2024-04-30 17:03:00 · 359 阅读 · 0 评论 -
20 | 多线程开发消费者实例
今天我们来聊聊 Kafka Java Consumer 端多线程消费的实现方案。目前,计算机的硬件条件已经大大改善,即使是在普通的笔记本电脑上,多核都已经是标配了,更不用说专业的服务器了。如果跑在强劲服务器机器上的应用程序依然是单线程架构,那实在是有点暴殄天物了。不过,Kafka Java Consumer 就是单线程的设计,你是不是感到很惊讶。所以,探究它的多线程消费方案,就显得非常必要了。原创 2024-04-30 16:31:55 · 965 阅读 · 0 评论 -
19 | CommitFailedException异常怎么处理?
今天聊聊 CommitFailedException 异常的处理。说起这个异常,我相信用过 Kafka Java Consumer 客户端 API 的你一定不会感到陌生。如果异常是可恢复的瞬时错误,提交位移的 API 自己就能规避它们了,因为很多提交位移的 API 方法是支持自动错误重试的,比如我们在上一期中提到的。每次和 CommitFailedException 一起出现的,还有一段非常著名的注释。为什么说它很“著名”呢?原创 2024-04-30 16:06:43 · 694 阅读 · 0 评论 -
18 | Kafka中位移提交那些事儿
今天我们来聊聊 Kafka 中位移提交的那些事儿。之前我们说过,Consumer 端有个位移的概念,它和消息在分区中的位移不是一回事儿,虽然它们的英文都是 Offset。今天我们要聊的位移是 Consumer 的消费位移,它记录了 Consumer 要消费的下一条消息的位移。这可能和你以前了解的有些出入,不过切记是下一条消息的位移,而不是目前最新消费消息的位移。举个例子说明一下。假设一个分区中有 10 条消息,位移分别是 0 到 9。原创 2024-04-30 15:46:13 · 441 阅读 · 0 评论 -
17 | 消费者组重平衡能避免吗?
今天我要和你分享的内容是:消费者组重平衡能避免吗?其实在专栏第 15 期中,我们讲过重平衡,也就是 Rebalance,现在先来回顾一下这个概念的原理和用途。Rebalance 就是让一个 Consumer Group 下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程。在 Rebalance 过程中,所有 Consumer 实例共同参与,在协调者组件的帮助下,完成订阅主题分区的分配。但是,在整个过程中,所有实例都不能消费任何消息,因此它对 Consumer 的 TPS 影响很大。原创 2024-04-30 15:04:16 · 529 阅读 · 0 评论 -
16 | 揭开神秘的“位移主题”面纱
用户不能修改,也就是说你不能随意地向这个主题写消息,因为一旦你写入的消息不满足 Kafka 规定的格式,那么 Kafka 内部无法成功解析,就会造成 Broker 的崩溃。事实上,Kafka Consumer 有 API 帮你提交位移,也就是向位移主题写消息。你千万不要自己写个 Producer 随意向该主题发送消息。你可能会好奇,这个主题存的到底是什么格式的消息呢?所谓的消息格式,你可以简单地理解为是一个 KV 对。原创 2024-04-30 12:00:18 · 451 阅读 · 0 评论 -
15 | 消费者组到底是什么?
今天要和你分享的主题是:Kafka 的消费者组。消费者组,即 Consumer Group,应该算是 Kafka 比较有亮点的设计了。那么何谓 Consumer Group 呢?。既然是一个组,那么组内必然可以有多个消费者或消费者实例(Consumer Instance),它们共享一个公共的 ID,这个 ID 被称为 Group ID。组内的所有消费者协调在一起来消费订阅主题(Subscribed Topics)的所有分区(Partition)。原创 2024-04-30 11:45:24 · 625 阅读 · 0 评论 -
14 | 幂等生产者和事务生产者是一回事吗?
幂等”这个词原是数学领域中的概念,指的是某些操作或函数能够被执行多次,但每次得到的结果都是不变的。我来举几个简单的例子说明一下。比如在乘法运算中,让数字乘以 1 就是一个幂等操作,因为不管你执行多少次这样的运算,结果都是相同的。再比如,取整函数(floor 和 ceiling)是幂等函数,那么运行 1 次 floor(3.4) 和 100 次 floor(3.4),结果是一样的,都是 3。相反地,让一个数加 1 这个操作就不是幂等的,因为执行一次和执行多次的结果必然不同。原创 2024-04-30 11:16:04 · 305 阅读 · 0 评论 -
13 | Java生产者是如何管理TCP连接的?
今天要和你分享的主题是:Kafka 的 Java 生产者是如何管理 TCP 连接的。原创 2024-04-30 10:48:56 · 415 阅读 · 0 评论 -
12 | 客户端都有哪些不常见但是很高级的功能?
如果你用过 Spring Interceptor 或是 Apache Flume,那么应该不会对拦截器这个概念感到陌生,其基本思想就是允许应用程序在不修改逻辑的情况下,动态地实现一组可插拔的事件处理逻辑链。它能够在主业务操作的前后多个时间点上插入对应的“拦截”逻辑。拦截器 1 和拦截器 2 分别在请求发送之前、发送之后以及完成之后三个地方插入了对应的处理逻辑。而 Flume 中的拦截器也是同理,它们插入的逻辑可以是修改待发送的消息,也可以是创建新的消息,甚至是丢弃消息。原创 2024-04-30 10:11:46 · 734 阅读 · 0 评论 -
11 | 无消息丢失配置怎么实现?
今天要和你分享的主题是:如何配置 Kafka 无消息丢失。一直以来,很多人对于 Kafka 丢失消息这件事情都有着自己的理解,因而也就有着自己的解决之道。在讨论具体的应对方法之前,我觉得我们首先要明确,在 Kafka 的世界里什么才算是消息丢失,或者说 Kafka 在什么情况下能保证消息不丢失。这点非常关键,因为很多时候我们容易混淆责任的边界,如果搞不清楚事情由谁负责,自然也就不知道由谁来出解决方案了。那 Kafka 到底在什么情况下才能保证消息不丢失呢?这句话里面有两个核心要素,我们一一来看。原创 2024-04-30 09:47:07 · 373 阅读 · 0 评论 -
10 | 生产者压缩算法面面观
今天要和你分享的内容是:生产者压缩算法面面观。说起压缩(compression),我相信你一定不会感到陌生。它秉承了用时间去换空间的经典 trade-off 思想,具体来说就是用 CPU 时间去换磁盘空间或网络 I/O 传输量,希望以较小的 CPU 开销带来更少的磁盘占用或更少的网络 I/O 传输。在 Kafka 中,压缩也是用来做这件事的。今天我就来跟你分享一下 Kafka 中压缩的那些事儿。原创 2024-04-29 18:31:12 · 558 阅读 · 0 评论 -
09 | 生产者消息分区机制原理剖析
我们在使用 Apache Kafka 生产和消费消息的时候,肯定是希望能够将数据均匀地分配到所有服务器上。比如很多公司使用 Kafka 收集应用服务器的日志数据,这种数据都是很多的,特别是对于那种大批量机器组成的集群环境,每分钟产生的日志量都能以 GB 数,因此如何将这么大的数据量均匀地分配到 Kafka 的各个 Broker 上,就成为一个非常重要的问题。今天就来和你说说 Kafka 生产者如何实现这个需求,我会以 Java API 为例进行分析,但实际上其他语言的实现逻辑也是类似的。原创 2024-04-29 18:30:29 · 685 阅读 · 0 评论 -
08 | 最最最重要的集群参数配置(下)
今天我们继续来聊那些重要的 Kafka 集群配置,下半部分主要是 Topic 级别参数、JVM 参数以及操作系统参数的设置。在上一期中,我们讨论了 Broker 端参数设置的一些法则,但其实 Kafka 也支持为不同的 Topic 设置不同的参数值。当前最新的 2.2 版本总共提供了大约 25 个 Topic 级别的参数,当然我们也不必全部了解它们的作用,这里我挑出了一些最关键的参数,你一定要把它们掌握清楚。原创 2024-04-29 18:26:02 · 685 阅读 · 0 评论 -
07 | 最最最重要的集群参数配置(上)
今天想和你聊聊最最最重要的 Kafka 集群配置。这里用了 3 个“最”字并非哗众取宠,而是因为有些配置的重要性并未体现在官方文档中,并且从实际表现看,很多参数对系统的影响要比从文档上看更加明显,因此很有必要集中讨论一下。希望通过两期内容把这些重要的配置讲清楚。严格来说这些配置并不单单指 Kafka 服务器端的配置,其中既有 Broker 端参数,也有主题(后面我用我们更熟悉的 Topic 表示)级别的参数、JVM 端参数和操作系统级别的参数。原创 2024-04-29 15:53:21 · 548 阅读 · 0 评论 -
06 | Kafka线上集群部署方案怎么做?
最后是社区的支持度。这一点虽然不是什么明显的差别,但如果不了解的话可能比前两个因素对你的影响更大。简单来说就是,社区目前对 Windows 平台上发现的 Kafka Bug 不做任何承诺。虽然口头上依然保证尽力去解决,但根据我的经验,Windows 上的 Bug 一般是不会修复的。原创 2024-04-29 15:33:09 · 576 阅读 · 0 评论 -
05 | 聊聊Kafka的版本号
今天我想和你聊聊如何选择 Kafka 版本号这个话题。今天要讨论的内容实在是太重要了,我觉得它甚至是你日后能否用好 Kafka 的关键。上一期介绍了目前流行的几种 Kafka 发行版,其实不论是哪种 Kafka,本质上都内嵌了最核心的 Apache Kafka,也就是社区版 Kafka,那今天我们就来说说 Apache Kafka 版本号的问题。在开始之前,我想强调一下后面出现的所有“版本”这个词均表示 Kafka 具体的版本号,而非上一篇中的 Kafka 种类,这一点切记切记!原创 2024-04-29 14:48:38 · 818 阅读 · 0 评论