![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
聊聊系列
文章平均质量分 91
老周聊架构
微信公众号:老周聊架构
展开
-
聊聊 Kafka:协调者 GroupCoordinator 源码剖析之 FIND_COORDINATOR
我们来看看是如何寻找负载最小节点的,首先就是取随机数,防止每次都从第一个节点连接,如果判断没有在途的 request 则直接返回该节点,否则取在途 request 最小的节点,如果该节点不存在,则依次取连接的节点、需要重试的节点,如果找到不为 null 的节点则返回该节点,否则返回 null。相同 Consumer Group 的 offset 最终会保存在其中一个分区中,而保存在哪个分区就由上面这段代码来决定,可以看到逻辑很简单,就是取 groupId 的 hashCode,然后对总的分区数取模。原创 2022-10-24 22:57:28 · 1288 阅读 · 1 评论 -
聊聊 K8S:K8S集群搭建实战
手把手系列原创 2022-10-19 22:11:58 · 658 阅读 · 0 评论 -
聊聊 Kafka:协调者 GroupCoordinator 源码剖析之实例化与启动 GroupCoordinator
在聊聊Kafka系列专栏中,我们前面讲了一篇聊聊KafkaConsumer源码解析之Consumer如何加入ConsumerGroup,其实那一篇主要讲的是客户端Consumer加入组请求、加入组响应、同步组请求、同步组响应等操作,我们这一篇主要来讲服务端侧协调者GroupCoordinator处理的请求。服务端处理客户端请求的入口都是KafkaApis类,它会根据不同的请求类型分发给不同的方法处理。...原创 2022-07-21 21:39:16 · 747 阅读 · 0 评论 -
聊聊 Kafka:Kafka 如何保证一致性
本文从高水位更新机制、副本同步机制以及 Leader Epoch 几个方面去剖析Kafka 是如何保证一致性的~原创 2022-06-06 22:49:31 · 5543 阅读 · 1 评论 -
聊聊 Kafka:Kafka 如何保证可靠性
一、前言在如今的分布式环境时代,任何一款中间件产品,大多都有一套机制去保证高可用的,Kafka 作为一个商业级消息中间件,消息可靠性的重要性可想而知,那 Kafka 如何保证可靠性的呢?本文从 Producer 往 Broker 发送消息、Topic 分区副本以及 Leader 选举几个角度介绍 Kafka 是如何保证可靠性的。二、Producer 往 Broker 发送消息如果我们要往 Kafka 对应的主题发送消息,我们需要通过 Producer 完成。前面我们讲过 Kafka 主题对应了多个分区原创 2022-05-29 23:03:32 · 1963 阅读 · 1 评论 -
聊聊 Kafka:Kafka 消息重复的场景以及最佳实践
一、前言上一篇我们讲了 聊聊 Kafka:Kafka 消息丢失的场景以及最佳实践,这一篇我们来说一说 Kafka 消息重复的场景以及最佳实践。我们下面会从以下两个方面来说一下 Kafka 消息重复的场景以及最佳实践。生产者重复消息消费者重复消息二、Kafka 消息重复的场景2.1 生产者重复消息2.1.1 根本原因生产者发送的消息没有收到 Broker 正确的响应,导致生产者重试。生产者发出一条消息,Broker 落盘以后因为网络等种种原因,发送端得到一个发送失败的响应或者网络中断,原创 2022-05-05 23:30:21 · 3014 阅读 · 1 评论 -
聊聊 Kafka:Kafka 消息丢失的场景以及最佳实践
一、前言大家好,我是老周,有快二十多天没有更新文章了,很多小伙伴一直在催更。先说明下最近的情况,最近项目上线很忙,没有时间写,并且组里有个同事使用 Kafka 不当,导致线上消息丢失,在修复一些线上的数据,人都麻了。事情是这样,有个 Kafka 消费者实例,部署到线上去,消费到了线上的数据,而新版本做了新的逻辑,新版本的业务逻辑与老版本的业务逻辑不兼容,直接导致消费失败,没有进行重试操作,关键还提交了 offset。直接这部分数据没有被业务处理,导致消息丢失,然后紧急修复线上数据。刚好这些天忙完了有空,原创 2022-05-01 22:52:53 · 2118 阅读 · 2 评论 -
聊聊 Pulsar: Pulsar 分布式集群搭建
一、集群搭建要求1.1 搭建设计搭建 Pulsar 集群至少需要 3 个组件:ZooKeeper 集群、Bookkeeper 集群和 Broker 集群(Broker 是 Pulsar 的自身实例)。这三个集群组件如下:ZooKeeper 集群(3 个 ZooKeeper 节点组成)Broker 集群(3 个 Pulsar 节点组成)Bookkeeper 集群(也称为 Bookie 集群,3 个 BookKeeper 节点组成)Pulsar 的安装包已包含了搭建集群所需的各个组件库。无需单独原创 2022-03-02 23:33:55 · 2859 阅读 · 1 评论 -
聊聊 Pulsar: 在 Linux 环境上搭建 Pulsar
一、环境准备jdk下载地址链接:jdk 1.8,提取码: dv5hpulsar下载地址链接:pulsar2.9.1,提取码: 84891.1 Java 环境为前提1.1.1 上传jdk-8u261-linux-x64.rpm到服务器并安装# 安装命令rpm -ivh jdk-8u261-linux-x64.rpm 1.1.2 配置环境变量# 编辑配置文件,jdk的bin目录到/etc/profile文件,对所有用户的shell有效vim /etc/profile# 生效source原创 2022-02-19 14:32:14 · 2601 阅读 · 0 评论 -
聊聊 Pulsar: Pulsar 的核心概念与基础架构
一、Pulsar 介绍Apache Pulsar 是 Apache 软件基金会的顶级项目,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,具有强一致性、高吞吐、低延时及高可扩展性等流数据存储特性。Pulsar 的关键特性如下:是下一代云原生分布式消息流平台。Pulsar 的单个实例原生支持多个集群,可跨机房在集群间无缝地完成消息复制。极低的发布延迟和端到端延迟。可无缝扩展到超过一百万个 topic。原创 2022-02-07 00:41:16 · 3953 阅读 · 2 评论 -
聊聊 Kafka:如何避免消费组的 Rebalance
一、前言我们上一篇聊了 Rebalance 机制,相信你对消费组的重平衡有个整体的认识。这里再简单回顾一下,Rebalance 就是让一个 Consumer Group 下所有的 Consumer 实例就如何消费订阅主题的所有分区达成共识的过程。在 Rebalance 过程中,Consumer Group 下所有的 Consumer 实例共同参与,在 Coordinator 协调者组件的帮助下,完成订阅主题分区的分配。但是,在整个过程中,所有实例都不能消费任何消息,因此它对 Consumer 的 TPS原创 2022-01-16 22:43:33 · 5675 阅读 · 1 评论 -
聊聊 Kafka: Consumer 源码解析之 Rebalance 机制
一、前言我们上一篇分析了 Consumer 如何加入 Consumer Group,其实上一篇是一个很宏观的东西,主要讲 ConsumerCoordinator 怎么与 GroupCoordinator 通信。等等,老周,ConsumerCoordinator 和 GroupCoordinator 是个啥玩意?这两个组件分别是 Consumer、Kafka Broker 的协调器,说白了就是我们设计模式中的门面模式,具体的内容可以看上一篇回顾下。今天这一篇主要讲上一篇 Consumer 如何加入 Cons原创 2021-12-27 00:46:30 · 740 阅读 · 1 评论 -
聊聊 Kafka: Consumer 源码解析之 Consumer 如何加入 Consumer Group
一、前言今天这一篇我们来说一下 Consumer 是如何加入 Consumer Group 的,我们前面有一篇 Kafka 的架构文章有说到,Consumer 有消费组(Consumer Group)的概念,而 Producer 没有生产组的概念。所以说 Consumer 侧会比 Producer 侧复杂点,除了消费者有消费组的概念,还需要维护管理 offset 偏移量、重复消费等问题。与消费组相关的两个组件,一个是消费者客户端的 ConsumerCoordinator,一个是 Kafka Broker原创 2021-12-07 23:18:59 · 1107 阅读 · 0 评论 -
聊聊 Kafka: Consumer 源码解析之 ConsumerNetworkClient
一、Consumer 的使用Consumer 的源码解析主要来看 KafkaConsumer,KafkaConsumer 是 Consumer 接口的实现类。KafkaConsumer 提供了一套封装良好的 API,开发人员可以基于这套 API 轻松实现从 Kafka 服务端拉取消息的功能,这样开发人员根本不用关心与 Kafka 服务端之间网络连接的管理、心跳检测、请求超时重试等底层操作,也不必关心订阅 Topic 的分区数量、分区副本的网络拓扑以及 Consumer Group 的 Rebalance原创 2021-11-29 22:52:37 · 2348 阅读 · 1 评论 -
聊聊 Kafka: Producer 的网络模型
一、Producer 的网络模型我们前面几篇有说 Producer 发送流程的源码分析,但那个是大的轮廓,涉及到发送很多相关的内容,比如:获取 topic 的 metadata 信息key 和 value 的序列化获取该 record 要发送到的 partition向 RecordAccmulator 中追加 record 数据唤醒 sender 线程发送 RecordBatch那这篇老周主要来说下 Producer 的网络模型,这里直接给出 Producer 的网络模型图,如下:从图原创 2021-11-08 23:26:16 · 723 阅读 · 0 评论 -
聊聊 Kafka:编译 Kafka 源码并搭建源码环境
一、前言老周这里编译 Kafka 的版本是 2.7,为啥采用这个版本来搭建源码的阅读环境呢?因为该版本相对来说比较新。而我为啥不用 2.7 后的版本呢?比如 2.8,这是因为去掉了 ZooKeeper,还不太稳定,生产环境也不太建议使用,所以以 2.7 版本进行源码搭建并研究。二、环境准备JDK:1.8.0_241Scala:2.13.6Gradle:5.6.3三、环境搭建3.1 JDK 环境搭建这个就不用我说了吧,搞 Java 的本机都有 JDK 环境。3.2 Scala 环境搭建原创 2021-10-10 23:08:59 · 1756 阅读 · 3 评论 -
聊聊 Kafka:Producer 源码解析
一、前言前面几篇我们讲了关于 Kafka 的基础架构以及搭建,从这篇开始我们就来源码分析一波。我们这用的 Kafka 版本是 2.7.0,其 Client 端是由 Java 实现,Server 端是由 Scala 来实现的,在使用 Kafka 时,Client 是用户最先接触到的部分,因此,我们从 Client 端开始,会先从 Producer 端开始,今天我们就来对 Producer 源码解析一番。二、Producer 使用首先我们先通过一段代码来展示 KafkaProducer 的使用方法。在下面原创 2021-09-09 00:41:13 · 1287 阅读 · 3 评论 -
聊聊 Kafka: Kafka 为啥这么快?
一、前言我们都知道 Kafka 是基于磁盘进行存储的,但 Kafka 官方又称其具有高性能、高吞吐、低延时的特点,其吞吐量动辄几十上百万。小伙伴们是不是有点困惑了,一般认为在磁盘上读写数据是会降低性能的,因为寻址会比较消耗时间。那 Kafka 又是怎么做到其吞吐量动辄几十上百万的呢?Kafka 高性能,是多方面协同的结果,包括宏观架构、分布式 partition 存储、ISR 数据同步、以及“无所不用其极”的高效利用磁盘、操作系统特性。别急,下面老周从数据的写入与读取两个维度来带大家一探究竟。二、顺原创 2021-08-26 01:13:31 · 3715 阅读 · 14 评论 -
聊聊 Kafka: Kafka 的基础架构
一、我与快递小哥的故事一个很正常的一个工作日,老周正在忙着啪啪啪的敲代码,办公司好像安静的只剩敲代码的声音。突然,我的电话铃声响起了,顿时打破了这种安静。我:喂,哪位?快递小哥:我是顺丰快递的,你有个包裹,请问你现在在家吗?我:哦,我现在不在家,晚上你再帮我送过来吧。快递小哥:要不我帮你放在菜鸟驿站吧?我:可以可以,谢谢了。还好有菜鸟驿站,不然工作日加班到很晚才回家,晚上快递小哥又下班了,得等到周末我在家快递小哥才能帮我送了。如果没有菜鸟驿站的话,我们来看下快递小哥与我的交互图:要是有原创 2021-08-09 00:29:33 · 4334 阅读 · 25 评论