Kafka权威指南(第2版)

Kafka权威指南(第2版)

 Kafka权威指南(第2版)|200

  • 作者: 格温·沙皮拉 托德·帕利诺 拉吉尼·西瓦拉姆 克里特·佩蒂
  • 简介: 本书介绍Kafka的技术原理和应用技巧。内容包括如何安装和配置Kafka、如何使用Kafka API、Kafka的设计原则和可靠性保证,以及Kafka的一些架构细节,如复制协议、控制器和存储层。本书列举了一些非常流行的Kafka应用场景,比如基于事件驱动的微服务系统的消息总线、流式处理应用程序和大规模数据管道。通过学习本书,你不仅能够深入理解这项大数据核心技术,还能够将所学知识付诸实践,在生产环境中更好地运行Kafka,并基于它构建稳健的高性能应用程序。
  • 出版时间: 2022-11-01
  • ISBN: 9787115601421
  • 分类: 计算机-编程设计
  • 出版社: 人民邮电出版社
  • 字数: 367217
  • 在线阅读: 微信读书
  • 划线数量: 27
  • 想法数量: 5

笔记

第2版序

📌 一个新的基于Raft的共识协议(通过单个可执行文件就可以运行Kafka)

  • ⏱ 2025-03-31 11:00:26 ^6-1077-1113

第1版序

📌 我们不想只是开发能够存储数据的系统(比如传统的关系数据库、键–值存储引擎、搜索引擎或缓存系统),而是希望能够把数据看成持续变化和增长的流,并基于这样的想法构建出一个数据系统,或是一种数据架构。

  • ⏱ 2025-03-31 11:53:04 ^7-798-894

📌 我们认为Kafka是一个流式平台:你可以在这个平台上发布和订阅数据流,并保存和处理它们,这就是构建Kafka的初衷。

  • ⏱ 2025-03-31 11:53:32 ^7-1163-1228

📌 。第一,作为现代分布式系统,Kafka以集群的方式运行,可以自由伸缩,为公司所有的应用程序提供支撑。

  • ⏱ 2025-03-31 12:00:15 ^7-1499-1549


📌 第二,Kafka可以按照要求存储数据,保存多久都可以。
💭 持久化

  • ⏱ 2025-03-31 12:00:42 ^19836794-7Z3qcWdI6

📌 第三,流式处理将数据处理的层次提升到了新的高度。一般的消息系统只传递消息,而Kafka的流式处理能力让你只用很少的代码就可以动态地处理派生数据流和数据集。

  • ⏱ 2025-03-31 11:54:32 ^7-1676-1753


📌 从另一个角度来看,可以把Kafka看成实时版的Hadoop
💭 Apache Hadoop是一款支持数据密集型分布式应用程式并以Apache 2.0许可协议发布的开源软件框架,有助于使用许多电脑组成的网络来解决数据、计算密集型的问题。基于MapReduce计算模型,它为大数据的分布式存储与处理提供了一个软件框架。所有的Hadoop模块都有一个基本假设,即硬件故障是常见情况,应该由框架自动处理。
Apache Hadoop的核心模块分为存储和计算模块,前者被称为Hadoop分布式文件系统(HDFS),后者即MapReduce计算模型。Hadoop框架先将文件分成数据块并分布式地存储在集群的计算节点中,接着将负责计算任务的代码传送给各节点,让其能够并行地处理数据。这种方法有效利用了数据局部性,令各节点分别处理其能够访问的数据。与传统的超级计算机架构相比,这使得数据集的处理速度更快、效率更高。

  • ⏱ 2025-03-31 11:59:26 ^19836794-7Z3q7QpAq

📌 Hadoop和大数据主要应用在数据分析上,而Kafka因其低延迟的特点更适合用在核心的业务应用上。

  • ⏱ 2025-03-31 11:59:40 ^7-2009-2058

第1章 初识Kafka

📌 数据(消息)的发送者(发布者)不会直接把消息发送给接收者,这是发布与订阅消息系统的一个特点。

  • ⏱ 2025-03-31 12:03:11 ^9-1126-1179

📌 发布与订阅系统一般会有一个broker,也就是发布消息的地方。

  • ⏱ 2025-03-31 12:03:00 ^9-1220-1251

📌 Kafka就是为了解决上述问题而设计的一款基于发布与订阅模式的消息系统。它一般被称为“分布式提交日志”或“分布式流式平台”。

  • ⏱ 2025-03-31 12:04:33 ^9-3462-3524

📌 Kafka的数据单元被称为消息。

  • ⏱ 2025-03-31 12:05:04 ^9-3731-3754

📌 Kafka的消息通过主题进行分类。

  • ⏱ 2025-03-31 12:05:24 ^9-4980-5004

📌 主题可以被分为若干个分区,一个分区就是一个提交日志。消息会以追加的方式被写入分区,然后按照先入先出的顺序读取。

  • ⏱ 2025-03-31 12:05:55 ^9-5024-5086

📌 需要注意的是,由于一个主题一般包含几个分区,因此无法在整个主题范围内保证消息的顺序,但可以保证消息在单个分区内是有序的。

  • ⏱ 2025-03-31 12:06:10 ^9-5086-5146

📌 Kafka通过分区来实现数据的冗余和伸缩。分区可以分布在不同的服务器上,也就是说,一个主题可以横跨多台服务器,以此来提供比单台服务器更强大的性能。此外,分区可以被复制,相同分区的多个副本可以保存在多台服务器上,以防其中一台服务器发生故障。

  • ⏱ 2025-03-31 12:07:00 ^9-5176-5295

📌 生产者创建消息。

  • ⏱ 2025-03-31 12:05:40 ^9-6073-6085

📌 消费者读取消息。

  • ⏱ 2025-03-31 12:07:24 ^9-6350-6362

📌 一台单独的Kafka服务器被称为broker。

  • ⏱ 2025-03-31 12:07:42 ^9-7281-7304

📌 broker组成了集群。

  • ⏱ 2025-03-31 12:08:06 ^9-7454-7473

📌 在集群中,一个分区从属于一个broker,这个broker被称为分区的首领。一个被分配给其他broker的分区副本(参见图1-7)叫作这个分区的“跟随者”。

  • ⏱ 2025-03-31 12:08:48 ^9-7558-7643


📌 保留消息(在一定期限内)是Kafka的一个重要特性。broker默认的消息保留策略是这样的:要么保留一段时间(如7天),要么保留消息总量达到一定的字节数(如1 GB)。
💭 过期时间 or 超限容量

  • ⏱ 2025-03-31 12:10:39 ^19836794-7Z3qRlFDM

第2章 安装Kafka

📌 Kafka用ZooKeeper来保存集群元数据和消费者信息,如图2-1所示。ZooKeeper是一种集中式服务,用于维护配置信息、命名、提供分布式同步和组服务。

  • ⏱ 2025-03-31 10:58:04 ^10-1449-1529

第4章 Kafka消费者——从Kafka读取数据

📌 session.timeout.ms指定了消费者可以在多长时间内不与服务器发生交互而仍然被认为还“活着”,默认是10秒。

  • ⏱ 2025-04-03 12:07:08 ^12-14779-14839


📌 把session.timeout.ms设置得比默认值小,可以更快地检测到崩溃,并从崩溃中恢复,但也会导致不必要的再均衡。把session.timeout.ms设置得比默认值大,可以减少意外的再均衡,但需要更长的时间才能检测到崩溃。
💭 延长消费者心跳超时时间,可以防止因短暂网络抖动导致误判消费者失联,从而避免不必要的rebalance。

  • ⏱ 2025-04-03 12:03:20 ^19836794-7Z7Zjikki

📌 这个属性指定了消费者在被认为已经“死亡”之前可以在多长时间内不发起轮询。

  • ⏱ 2025-04-03 12:06:55 ^12-15389-15425


📌 于是,设置max.poll.interval.ms就成了一种保险措施。它必须被设置得足够大,让正常的消费者尽量不触及这个阈值,但又要足够小,避免有问题的消费者给应用程序造成严重影响。这个属性的默认值为5分钟。当这个阈值被触及时,后台线程将向broker发送一个“离开群组”的请求,让broker知道这个消费者已经“死亡”,必须进行群组再均衡,然后停止发送心跳。
💭 max.poll.interval.ms设置过小会触发频繁的rebalance,最好是分钟级。

  • ⏱ 2025-04-03 12:05:06 ^19836794-7Z7Zqp7VP

第7章 可靠的数据传递

📌 Kafka可以保证分区中的消息是有序的。

  • ⏱ 2025-03-28 16:36:05 ^15-1561-1581

📌 一条消息只有在被写入分区所有的同步副本时才被认为是“已提交”的(但不一定要冲刷到磁盘上)。

  • ⏱ 2025-03-28 16:35:53 ^15-1695-1740

📌 Kafka的复制机制和分区多副本架构是Kafka可靠性保证的核心。把消息写入多个副本可以保证Kafka在发生崩溃时仍然能够提供消息的持久性。

  • ⏱ 2025-03-28 16:35:22 ^15-2248-2318