Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >图解Kafka中的基本概念

图解Kafka中的基本概念

作者头像
草捏子
发布于 2020-08-19 12:58:40
发布于 2020-08-19 12:58:40
5130
举报
文章被收录于专栏:草捏子草捏子

首先我们回顾下在消息系统的使用场景中有三种角色分别是生产者消息系统消费者,其中生产者负责产生消息和发送消息到消息系统,而消息系统将为消费者提供消息用于处理,如下图。

Kafka是基于发布/订阅模式的消息系统,如下图。生产者会将消息推送到Kafka中的某个Topic上。引入Topic的目的则是为了对消息进行分类,这样消费者就可以根据需要订阅相应的Topic获取消息。

虽然Kafka这样已经能开始工作了,但紧接着又面临单点问题。而为了解决单点问题,Kafka引入了Broker的概念。一个Broker是一个Kafka实例,而一台机器上可运行多个Broker,这里我们认为一台机器上只有一个Kafka实例。多个Broker将形成一个Kafka集群,而Topic也可指定副本数量,作为多个副本位于多台机器上。Kafka使用ZooKeeper在多个副本中选举出一个Leader,其他副本将作为Follower。Leaer主要负责读写消息,也就是和生产者、消费者打交道,同时将消息同步写到其他副本中。当有Broker失效时,如果Topic没有了Leader,则会重新选举出新的Leader,从而解决单点问题。

引入Broker和副本后解决了单点问题,接着面对的是性能问题,对于单个Topic来说,只有Leader所在的Broker与生产者、消费者进行通信,这样吞吐量将受到Broker所在的机器限制。那么如何提高吞吐量。Kafka将Topic拆分成多个分区,也就是将消息进行划分,类似数据库的分库,这样起到了负载均衡的作用,可不受单机的限制。如下图,生产者A分别往TopicA的分区0和分区1写消息,而消费者A、B则也从分区0、1获取消息。这里注意下,在不同分区存储的消息也是不同的,和副本的概念要分清楚。

从上图中我们可看到消费者A在消费TopicA时分别从分区0、分区1中获取消息,为了进一步提高吞吐量,Kafka引入了消费组的概念,将消费者A拆分成多个消费者,从而形成一个消费组。我们可以这样理解,消费者A是一个应用A实例,为了提高消费的吞吐量,我们多部署了几个消费者A实例,这样就有多个消费者形成一个消费组,但干的都是应用A做的事,需要与消费者B(不同的应用)区分开。一般设置消费组的消费者数与分区数一致,这是为了一个消费者能负责一个分区,提高效率。如果消费组的消费者数量小于分区数,则会出现一个消费者负责多个分区。而如果消费组的消费者数量大于分区数,则会出现有消费者分不到分区,造成浪费。所以一般保持一致。为了简洁,且消费组B和消费组A类似,所以下图未将消费组B画出。

Kafka中的基本概念就是以上这些:生产者、消费者、Topic、Broker、副本、分区和消息组。最后为了大家更好的理解分区的概念,再画一张细节图。

一个分区可以看做是一个单独的队列,生产者根据策略将消息写入对于的分区,策略有三种:一、直接指定分区;二、如果未指定分区,则根据消息的key,通过哈希函数指定分区;三、如果没有key,则轮询分区。这里想强调的是分区中的数据是不同的,一条消息只会进入一个分区。而消费组中的消费者则会根据偏移量去分区中取得相应的消息进行消费处理。

喜欢就点个在看再走吧

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-08-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 草捏子 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop的一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群机来提供实时的消费。
HUC思梦
2020/09/03
1.2K2
Kafka
Kafka系列1:Kafka概况
Kafka是当前分布式系统中最流行的消息中间件之一,凭借着其高吞吐量的设计,在日志收集系统和消息系统的应用场景中深得开发者喜爱。本篇就聊聊Kafka相关的一些知识点。主要包括以下内容:
王金龙
2020/02/17
8250
Kafka基础
Apache Kafka是一个分布式流式平台,设计用于处理大量的实时数据流。其主要目标是提供持久的、高吞吐量的、可水平扩展的消息系统。Kafka可以用于构建实时数据管道和流式应用程序,广泛应用于日志聚合、事件处理、监控等场景。
酒楼
2024/01/06
1410
Kafka 架构组成-只有概念
Apache Kafka是一个分布式的基于发布订阅消息系统的消息队列,可以处理大量的数据,并使您能够将消息从一个端点传递到另一个端点
_春华秋实
2025/01/22
920
Kafka 架构组成-只有概念
图解Kafka:Kafka架构演化与升级!
了解了 Kafka 架构就掌握了 Kafka 最核心的知识,Kafka 作为业界最知名、最流行的消息系统和流式处理组件,在面试中和日常工作中经常会见到。那么今天,我们就来聊聊 Kafka 的架构演化与升级,并通过图解的方式让你一目了然。
磊哥
2024/08/23
4190
Kafka 基础概念及架构
Kafka是⼀个分布式、分区的、多副本的、多⽣产者、多订阅者,基于zookeeper协调的分布式⽇志系统(也可以当做MQ系统),常⻅可以⽤于web/nginx⽇志、访问⽇志,消息服务等等。 Kafka主要应⽤场景:⽇志收集系统和消息系统
用户7353950
2022/06/23
9500
Kafka 基础概念及架构
如何快速全面掌握Kafka?5000字吐血整理
Kafka 是目前主流的分布式消息引擎及流处理平台,经常用做企业的消息总线、实时数据管道,本文挑选了 Kafka 的几个核心话题,帮助大家快速掌握 Kafka,包括:
大数据技术架构
2020/03/13
2.6K0
如何快速全面掌握Kafka?5000字吐血整理
一文了解Kafka核心概念和角色
比如说,topic有6个partition,有两个broker,那每个broker就管3个partition。
王知无-import_bigdata
2020/07/03
2.1K0
Kafka基础(一):基本概念及生产者、消费者示例
Kafka 起初是由 LinkedIn 公司采用 Scala 语言开发的一个多分区、多副本且基于 Zookeeper 协调的分布式消息系统,现已被捐献给 Apache 基金会。目前 Kafka 已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性被广泛使用。目前越来越多的开源式分布处理系统如:Storm、Spark、Flink 等都支持与 Kafka 集成。
create17
2019/06/19
9350
图说Kafka基本概念
使用kafka可以对系统解耦、流量削峰、缓冲,可以实现系统间的异步通信等。在活动追踪、消息传递、度量指标、日志记录和流式处理等场景中非常适合使用kafka。这篇文章主要介绍下kafka中的基本概念。
valineliu
2022/09/01
1.9K0
图说Kafka基本概念
Kafka 设计原理
serena
2017/08/21
6.1K0
Kafka 设计原理
Apache Kafka架构设计&部署&实践小指南
所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。
大数据真好玩
2021/07/07
5310
一网打尽Kafka入门基础概念
最近需要做的项目里用到了kafka消息队列,对于一个主要面向大数据实时计算的日志消息系统,在大公司里面用的是非常多的,也是Java程序员通往高级开发必须要掌握的一门中间件技术。
用户3587585
2022/04/14
3160
一网打尽Kafka入门基础概念
Kafka设计原理全览:一篇文章让你搞懂
Kafka 本质上是一个分布式流式处理平台,主要功能是消息队列(Message Queue)。它以高吞吐量、低延迟和可扩展性而闻名,被广泛应用于实时数据管道和流应用程序。使用消息队列的优点:
Lion 莱恩呀
2025/04/21
3510
Kafka设计原理全览:一篇文章让你搞懂
Kafka实战(2)-Kafka消息队列模型核心概念
Kafka发布订阅的对象是主题(Topic),可为每个业务、每个应用甚至是每类数据都创建专属的主题。
JavaEdge
2022/11/30
4850
Kafka实战(2)-Kafka消息队列模型核心概念
Apache Kafka学习
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。Kafka是一种消息队列,主要用来处理大量数据状态下的消息队列,一般用来做日志的处理。
chimchim
2023/10/17
3390
Apache Kafka学习
慌得一逼,Kafka宕机后不再高可用?吓死宝宝了
问题要从一次 Kafka 的宕机开始说起。笔者所在的是一家金融科技公司,但公司内部并没有采用在金融支付领域更为流行的 RabbitMQ,而是采用了设计之初就为日志处理而生的 Kafka,所以我一直很好奇 Kafka 的高可用实现和保障。
业余草
2020/10/10
1.1K0
慌得一逼,Kafka宕机后不再高可用?吓死宝宝了
kafka架构设计学习
 所以消息系统就是如上图我们所说的仓库,能在中间过程作为缓存,并且实现解耦合的作用。
Vincent-yuan
2022/05/06
2960
kafka架构设计学习
进击消息中间件系列(一):Kafka 入门(基本概念与架构)
系统的一部分组件失效时,不会影响到整个系统。消息队列降低了进程间的耦合度,所以即使一个处理消息的进程挂掉,加入队列中的消息仍然可以在系统恢复后被处理。
民工哥
2023/08/22
2.3K0
进击消息中间件系列(一):Kafka 入门(基本概念与架构)
kafka主要用来做什么_kafka概念
Kafka 最初由LinkedIn公司开发的,并于 2010 年贡献给了 Apache 基金会,之后成为 Apache 顶级项目。
全栈程序员站长
2022/11/09
2.7K0
kafka主要用来做什么_kafka概念
相关推荐
Kafka
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档