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

    文章

    521

    浏览量

    25611
  • kafka
    +关注

    关注

    0

    文章

    52

    浏览量

    5252

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

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

收藏 人收藏

    相关推荐

    华为云 FlexusX 实例下的 Kafka 集群部署实践与性能优化

    前言 华为云 FlexusX 实例,以创新的柔性算力技术,为 Kafka 集群部署带来前所未有的性能飞跃。其灵活的 CPU 与内存配比,结合智能调度与加速技术,让 Kafka 在高并发场景下依然
    的头像 发表于 01-07 17:23 221次阅读
    华为云 FlexusX 实例下的 <b class='flag-5'>Kafka</b> 集群部署实践与性能优化

    docker 部署 kafka 及 ui 搭建

    建站、开发  测试环境、游戏服务器、音视频服务等中低负载场景。 1.2 什么是 kafka 原文链接:https
    的头像 发表于 01-03 09:30 178次阅读
    docker 部署 <b class='flag-5'>kafka</b> 及 ui 搭建

    先进封装的核心概念、技术和发展趋势

    先进封装简介 先进封装技术已成为半导体行业创新发展的主要推动力之一,为突破传统摩尔定律限制提供了新的技术手段。本文探讨先进封装的核心概念、技术和发展趋势[1]。 图1展示了硅通孔(TSV)技术
    的头像 发表于 12-18 09:59 613次阅读
    先进封装的<b class='flag-5'>核心</b><b class='flag-5'>概念</b>、技术和发展趋势

    超详细“零”基础kafka入门篇

    响应数据流的实时流应用程序 要了解Kafka如何做这些事情,让我们深入探讨Kafka的能力。 (3)首先是几个概念
    的头像 发表于 12-18 09:50 1058次阅读
    超详细“零”基础<b class='flag-5'>kafka</b>入门篇

    Docker和k8s的核心概念

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

    具身智能的核心概念解析

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

    Linux应用编程的基本概念

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

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

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

    Kafka高性能背后的技术原理

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

    谐波的概念及应用

    本文简单介绍了谐波的概念及应用。
    的头像 发表于 10-18 14:14 794次阅读
    谐波的<b class='flag-5'>概念</b>及应用

    循环神经网络的基本概念

    循环神经网络(Recurrent Neural Network,简称RNN)是一种具有循环结构的神经网络,其核心思想是将前一个时间步的输出作为下一个时间步的输入,从而实现对序列数据的建模。本文将从
    的头像 发表于 07-04 14:31 906次阅读

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

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

    面试官:Kafka会丢消息吗?

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

    fpga的概念

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

    EMC技术:基础概念到应用的解读?|深圳比创达电子.

    EMC技术:基础概念到应用的解读?|深圳比创达电子电磁兼容性(Electromagnetic Compatibility,简称EMC)作为一项重要的技术领域,在现代电子设备中扮演着至关重要的角色
    发表于 03-11 11:59