0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Kafka的核心概念

马哥Linux运维 来源:马哥Linux运维 作者:马哥Linux运维 2022-06-20 14:24 次阅读

Kafka 是主流的消息流系统,其中的概念还是比较多的,下面通过图示的方式来梳理一下 Kafka 的核心概念,以便在我们的头脑中有一个清晰的认识。

01 基础

Kafka 是一套流处理系统(也可以叫消息队列),可以让后端服务轻松地相互沟通,是微服务架构中的常用组件。

d73d250e-efd4-11ec-ba43-dac502259ad0.jpg

02 生产者消费者

生产者服务 Producer 向 Kafka 发送消息,消费者服务 Consumer 监听 Kafka 接收消息。

d74b5980-efd4-11ec-ba43-dac502259ad0.jpg

一个服务可以同时为生产者和消费者。

d75cb8f6-efd4-11ec-ba43-dac502259ad0.jpg

03 Topics 主题

Topic 是生产者发送消息的目标地址,是消费者的监听目标。

d76a322e-efd4-11ec-ba43-dac502259ad0.jpg

一个服务可以监听、发送多个 Topics。

d785daa6-efd4-11ec-ba43-dac502259ad0.jpg

Kafka 中有一个【consumer-group(消费者组)】的概念。

这是一组服务,扮演一个消费者。

d79d6504-efd4-11ec-ba43-dac502259ad0.jpg

如果是消费者组接收消息,Kafka 会把一条消息路由到组中的某一个服务。

d7bbde76-efd4-11ec-ba43-dac502259ad0.jpg

这样有助于消息的负载均衡,也方便扩展消费者。

Topic 扮演一个消息的队列。首先,一条消息发送了。

d7ccbb06-efd4-11ec-ba43-dac502259ad0.jpg

然后,这条消息被记录和存储在这个队列中,不允许被修改。

d7ef00d0-efd4-11ec-ba43-dac502259ad0.jpg

接下来,消息会被发送给此 Topic 的消费者。

但是,这条消息并不会被删除,会继续保留在队列中。

d7fe1098-efd4-11ec-ba43-dac502259ad0.jpg

继续发送消息。

d814eea8-efd4-11ec-ba43-dac502259ad0.jpg

像之前一样,这条消息会发送给消费者,不允许被改动,一直呆在队列中(消息在队列中能待多久,取决于 Kafka 的配置)。

d825185a-efd4-11ec-ba43-dac502259ad0.jpg

d8426d9c-efd4-11ec-ba43-dac502259ad0.jpg

04 Partitions 分区

上面 Topic 的描述中,把 Topic 看做了一个队列,实际上,一个 Topic 是由多个队列组成的,被称为【Partition(分区)】。

这样可以便于 Topic 的扩展。

d85453e0-efd4-11ec-ba43-dac502259ad0.jpg

生产者发送消息的时候,这条消息会被路由到此 Topic 中的某一个分区(Partition)。

d85f8152-efd4-11ec-ba43-dac502259ad0.jpg

消费者监听的是所有分区并消耗所有人的事件。

d879a960-efd4-11ec-ba43-dac502259ad0.jpg

生产者发送消息时,默认是面向 Topic 的,由 Topic 决定放在哪个 Partition,默认使用轮询策略。

d889aef0-efd4-11ec-ba43-dac502259ad0.jpg

也可以配置 Topic,让同类型的消息都在同一个 Partition。

例如,处理用户消息,可以让某一个用户所有消息都在一个 Partition。

例如,用户 1 发送了 3 条消息:A、B、C,默认情况下,这 3 条消息是在不同的 Partition 中(如 P1、P2、P3)。

在配置之后,可以确保用户 1 的所有消息都发到同一个分区中(如 P1)。

d8a34644-efd4-11ec-ba43-dac502259ad0.jpg

这个功能有什么用呢?这是为了提供消息的【有序性】。

消息在不同的 Partition 是不能保证有序的,只有一个 Partition 内的消息是有序的。

d8bd0782-efd4-11ec-ba43-dac502259ad0.jpg

d8cf8ca4-efd4-11ec-ba43-dac502259ad0.jpg

05 架构

Kafka 是集群架构的,ZooKeeper 是其重要组件。

d8f4aa84-efd4-11ec-ba43-dac502259ad0.jpg

ZooKeeper 管理着所有的 Topic 和 Partition。

Topic 和 Partition 存储在 Node 物理节点中,ZooKeeper 负责维护这些 Node。

d907fc4c-efd4-11ec-ba43-dac502259ad0.jpg

例如,有 2 个 Topic,各自有 2 个 Partition。

d919a65e-efd4-11ec-ba43-dac502259ad0.jpg

这是逻辑上的形式,但在 Kafka 集群中的实际存储可能是这样的:

d92779aa-efd4-11ec-ba43-dac502259ad0.jpg

Topic A 的 Partition#1有 3 份,分布在各个 Node 上。

这样可以增加 Kafka 的可靠性和系统弹性。

3 个 Partition#1中,ZooKeeper 会指定一个 Leader,负责接收生产者发来的消息。

d93a0c5a-efd4-11ec-ba43-dac502259ad0.jpg

其他 2 个 Partition #1 会作为 Follower,Leader 接收到的消息会复制给 Follower。

d958fc82-efd4-11ec-ba43-dac502259ad0.jpg

这样,每个 Partition 都含有了全量消息数据。

d9782cf6-efd4-11ec-ba43-dac502259ad0.jpg

即使某个 Node 节点出现了故障,也不用担心消息的损坏。

Topic A 和 Topic B 的所有 Partition 分布可能就是这样的:

d98d59b4-efd4-11ec-ba43-dac502259ad0.jpg

这样一来,你对 Kafka 的组件有了一个初步认识,更多关于 Kafka 或消息队列的内容,可以查阅相关资料,感谢您的阅读,希望对您有所帮助。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 架构
    +关注

    关注

    1

    文章

    509

    浏览量

    25443
  • kafka
    +关注

    关注

    0

    文章

    50

    浏览量

    5211

原文标题:讲真!Kafka 的原理竟是这样的,一看就明白!

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Docker和k8s的核心概念

    这是在HWL负责网校云业务线测试时,给同事分享的基础概念文档。
    的头像 发表于 11-04 15:47 135次阅读
    Docker和k8s的<b class='flag-5'>核心</b><b class='flag-5'>概念</b>

    具身智能的核心概念解析

    1. 具身性(Embodiment) 具身性是具身智能的一个核心概念,它强调智能行为不仅仅是大脑中抽象的计算过程,而是与身体和环境紧密相关。具身性认为,智能是通过身体与环境的互动而产生的,智能
    的头像 发表于 10-27 09:52 376次阅读

    Linux应用编程的基本概念

    Linux应用编程涉及到在Linux环境下开发和运行应用程序的一系列概念。以下是一些涵盖Linux应用编程的基本概念
    的头像 发表于 10-24 17:19 180次阅读

    智慧城市的核心概念与联系

    智慧城市是指利用信息通信技术、大数据分析等现代科技手段,以提升城市管理效率、改善居民生活质量为目标的城市发展模式。在 智慧城市 构建过程中,有几个核心概念与联系需要被理解和把握: 1. 信息与通信
    的头像 发表于 10-23 15:55 144次阅读

    Kafka高性能背后的技术原理

    Kafka 是一款性能非常优秀的消息队列,每秒处理的消息体量可以达到千万级别。
    的头像 发表于 10-23 09:37 246次阅读
    <b class='flag-5'>Kafka</b>高性能背后的技术原理

    输入阻抗与输出阻抗的概念

    在电子学和电路理论中,阻抗是一个核心概念,它描述了电路对电流的阻碍作用。在电路分析和设计中,我们经常遇到输入阻抗和输出阻抗这两个概念。它们分别代表了电路在输入端和输出端对外部电路的阻碍作用。本文将详细探讨输入阻抗和输出阻抗的
    的头像 发表于 05-28 14:33 3060次阅读

    面试官:Kafka会丢消息吗?

    许多开发人员普遍认为,Kafka 的设计本身就能保证不会丢失消息。然而,Kafka 架构和配置的细微差别会导致消息的丢失。我们需要了解它如何以及何时可能丢失消息,并防止此类情况的发生。
    的头像 发表于 04-29 17:32 977次阅读
    面试官:<b class='flag-5'>Kafka</b>会丢消息吗?

    fpga的概念

    到目前为止,有没有变化和发展? 有无淘汰的概念
    发表于 03-30 11:40

    Redis流与Kafka相比如何?

    我们先来看看Kafka的基本架构。基本的数据结构是主题。它是一个按时间排序的记录序列,只需追加。使用这种数据结构的好处在Jay Kreps的经典博文The Log中得到了很好的描述。
    的头像 发表于 02-21 16:09 430次阅读
    Redis流与<b class='flag-5'>Kafka</b>相比如何?

    kafka基本原理详解

    今天浩道跟大家分享一篇关于kafka相关原理的硬核干货,可以说即使你没有接触过kafka,也可以秒懂,一起看看!
    的头像 发表于 01-03 09:57 857次阅读
    <b class='flag-5'>kafka</b>基本原理详解

    kafka支持哪些消息交付语义?

    在读完kafka官方文档,kafka设计里的消息交付语义一章后,给我的第一印象是内容很抽象,于是草拟和总结了给个副标题,并把相关内容进行了归类;有些生涩的句子,尽量用大白话和举例进行说明,并加入了总结。
    的头像 发表于 12-22 11:27 466次阅读
    <b class='flag-5'>kafka</b>支持哪些消息交付语义?

    如何保证kafka消息不丢失

    如果在简历上写了使用过kafka消息中间件,面试官大概80%的概率会问你:"如何保证kafka消息不丢失?"反正我是屡试不爽。
    的头像 发表于 12-19 09:52 703次阅读
    如何保证<b class='flag-5'>kafka</b>消息不丢失

    zookeeper和kafka的关系

    Zookeeper和Kafka是两个不同的开源软件,它们可以在分布式系统中发挥不同的作用。下面我将详细说明它们之间的关系以及它们在分布式系统中的作用。 首先,让我们先介绍一下Zookeeper
    的头像 发表于 12-03 16:39 1485次阅读

    golang中使用kafka的综合指南

    kafka是一个比较流行的分布式、可拓展、高性能、可靠的流处理平台。在处理kafka的数据时,这里有确保处理效率和可靠性的多种最佳实践。本文将介绍这几种实践方式,并通过sarama实现他们。
    的头像 发表于 11-30 11:18 539次阅读

    ros的基本概念是什么

    基本概念: ROS是一个用于在不同进程间匿名的发布、订阅、传递信息的中间件。 ROS2系统的核心部分是ROS网络(ROS Graph)。 ROS网络是指在ROS系统中不同的节点间相互通信的连接
    的头像 发表于 11-27 11:21 1743次阅读