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

    文章

    485

    浏览量

    25200
  • kafka
    +关注

    关注

    0

    文章

    49

    浏览量

    5162

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

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

收藏 人收藏

    评论

    相关推荐

    面试官:Kafka会丢消息吗?

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

    Redis流与Kafka相比如何?

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

    kafka基本原理详解

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

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

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

    如何保证kafka消息不丢失

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

    golang中使用kafka的综合指南

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

    如何将Kafka使用到我们的后端设计中

    本文介绍了以下内容: 1.什么是Kafka? 2.为什么我们需要使用Kafka这样的消息系统及使用它的好处 3.如何将Kafka使用到我们的后端设计中。 译自timber.io
    的头像 发表于 10-30 14:30 257次阅读
    如何将<b class='flag-5'>Kafka</b>使用到我们的后端设计中

    kafka相关命令详解

    kafka常用命令详解
    的头像 发表于 10-20 11:34 358次阅读

    Kafka架构技术:Kafka的架构和客户端API设计

    Kafka 给自己的定位是事件流平台(event stream platform)。因此在消息队列中经常使用的 "消息"一词,在 Kafka 中被称为 "事件"。
    的头像 发表于 10-10 15:41 279次阅读
    <b class='flag-5'>Kafka</b>架构技术:<b class='flag-5'>Kafka</b>的架构和客户端API设计

    Spring Kafka的各种用法

    最近业务上用到了Spring Kafka,所以系统性的探索了下Spring Kafka的各种用法,发现了很多实用的特性,下面介绍下Spring Kafka的消息重试机制。 0. 前言 原生
    的头像 发表于 09-25 17:04 400次阅读

    监控Kafka集群的常用的方法和工具介绍

    JMX监控:Kafka提供了JMX(Java Management Extensions)接口,可以通过JMX来监控和管理Kafka集群。您可以使用JConsole、Java Mission
    发表于 08-30 10:05 955次阅读
    监控<b class='flag-5'>Kafka</b>集群的常用的方法和工具介绍

    Kafka中学习高性能系统如何设计

    相信各位小伙伴之前或多或少接触过消息队列,比较知名的包含 Rocket MQ 和 Kafka,在京东内部使用的是自研的消息中间件 JMQ,从 JMQ2 升级到 JMQ4 的也是带来了性能上的明显提升,并且 JMQ4 的底层也是参考 Kafka 去做的设计。
    的头像 发表于 07-17 11:25 393次阅读
    从<b class='flag-5'>Kafka</b>中学习高性能系统如何设计

    物通博联5G-kafka工业网关实现kafka协议对接到云平台

    Kafka协议是一种基于TCP层的网络协议,用于在分布式消息传递系统Apache Kafka中发送和接收消息。Kafka协议定义了客户端和服务器之间的通信方式和数据格式,允许客户端发送消息到K
    的头像 发表于 07-11 10:44 302次阅读

    Kafka 的简介

      1 kafka简介 2 为什么要用消息系统 3 kafka基础知识 4 kafka集群架构 5 总结   1 kafka简介 其主要设计目标如下: 以时间复杂度为O(1)的方式提供
    的头像 发表于 07-03 11:10 349次阅读
    <b class='flag-5'>Kafka</b> 的简介

    想要kafka好用你就得知道这些工具

    工欲善其事,必先利其器。本文主要分享一下消息中间件kafka安装部署的过程,以及我平时在工作中针对kafka用的一些客户端工具和监控工具。
    的头像 发表于 05-22 16:33 1028次阅读
    想要<b class='flag-5'>kafka</b>好用你就得知道这些工具