Kafka实战(二)-Kafka消息模型核心概念(上)

简介: Kafka实战(二)-Kafka消息模型核心概念(上)

Kafka是分布式的,基于发布订阅的消息系统。

1 特点

  • 同时为发布和订阅提供高吞吐量
    Kafka每秒可生产约25万条消息(50 MB),每秒处理55万条消息(110 MB)
  • 持久化
    默认就将消息持久化到磁盘,因此可用于批量消费,例如ETL,以及实时应用程序。通过将数据持久化到硬盘以及防止数据丢失。以O(1)时间复杂度提供消息持久化能力,即使对TB级以上数据也能保证常数时间复杂度的访问性能。
  • 分布式系统,易于向外扩展
    所有的producer、broker和consumer都会有多个,均为分布式的。无需停机即可扩展机器。消息被处理的状态是在consumer端维护,而不是由server端维护。当失败时能自动平衡
  • 支持online和offline场景

Kafka发布订阅的对象是主题(Topic),可为每个业务、每个应用甚至是每类数据都创建专属的主题。


Message

消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息

1 Producer & Consumer(客户端)

  • 生产者(Producer)
    向主题发布消息的客户端应用。生产者程序通常持续不断向一或多个主题发消息。
  • 消费者(Consumer)
    订阅这些主题消息的客户端应用程序。消费者也能同时订阅多个主题消息。

生产者和消费者统称为客户端(Clients)。可同时运行多个生产者和消费者实例,这些实例会不断向Kafka集群中的多个主题生产和消费消息。


2 Broker(服务器端)

Kafka的服务器端由被称为Broker的服务进程构成,即一个Kafka集群由多个Broker组成。


Broker负责接收和处理客户端发送过来的请求,以及对消息进行持久化。


虽然多个Broker进程能够运行在同一机器,但更常见的做法是将不同的Broker分散运行在不同机器。

这样如集群中某一机器宕机,即使在它上面运行的所有Broker进程都挂,其他机器的Broker也依然能够对外提供服务。

这也是Kafka高可用的手段之一。


image.png

3 Partitioning(分区)

partition,物理上的概念,有序不可变的record序列,partition中的record会被分配一个自增长id(offset)。

一个topic中的消息数据按照多个分区组织,partition是kafka消息队列组织的最小单位,一个partition可看做是一个队列。


虽然副本机制可保证数据持久化以不丢消息,但未解决Scalability伸缩性问题。

虽现在有leader、follower副本,但若leader副本积累太多数据以至单台Broker无法容纳,何如?

Kafka就会把数据分割成多份保存在不同Broker,即分区。类似其他分布式系统的分片、分区域等提法,比如


MongoDB和Elasticsearch中的Sharding

HBase中的Region


都是相同原理,但Partitioning才是最标准名称。

Kafka分区是将每个topic划成多个分区(Partition),每个Partition内是一组顺序消息日志

生产者生产的每条消息只会被发送到一个分区,即向一个双分区的主题发送一条消息,该消息要么在分区0,要么在分区1(分区编号从0开始)。


副本与分区

副本是在分区级别定义的。

每个分区下可配置若干个副本,其中只能有1个领导者副本和N-1个追随者副本。

生产者向分区写入消息,每条消息在分区中的位置信息由一个叫位移(Offset)的数据来表征。

分区位移总是从0开始,假设一个生产者向一个空分区写入了10条消息,那么这10条消息的位移依次是0、1、2、…、9。

4 Topic

一个业务即一个Topic。

每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic。物理上不同Topic的消息分开存储,逻辑上一个Topic的消息虽保存于一或多个broker,但用户只需指定消息的Topic即可生产或消费数据,不必关心数据存于何处。


数据主题,是Kafka中用来代表一个数据流的一个抽象,Kafka处理的消息源(feeds of messages)的不同分类。


发布数据时,可用topic对数据分类,也作为订阅数据时的主题。

一个Topic同时可有多个producer、consumer。

Topic可理解为一个队列,生产者和消费者面向的都是同一topic。


image.png

image.png

5 3 Replication - 副本

实现高可用的另一个手段。

为保证分布式可靠性,kafka0.8开始对每个分区的数据进行备份(不同Broker上),防止其中一个Broker宕机造成分区数据不可用。


每个partition被复制到其它服务器作为replication,这是一种冗余备份策略

image.png

同一partition的多个replication不允许在同一broker


每个partition的replication中,有一个leader,零或多follower


leader处理此分区所有的读写请求

follower仅被动的复制数据


leader宕机后,会从follower中选举出新的leader

副本数量是可配置的,副本保存着相同的数据,却有不同

3.1 副本的分类

Kafka定义了两类副本

  • 领导者副本(Leader Replica)
    对外提供服务,与客户端程序交互
  • 追随者副本(Follower Replica)
    只被动地追随领导者副本,不与外界交互


在很多其他系统中追随者副本是可以对外提供服务的,比如MySQL的从库是可以处理读操作的,但是在Kafka中追随者副本不会对外提供服务。

3.2 副本的工作机制

  • 生产者总是向领导者副本写消息
  • 而消费者总是从领导者副本读消息

至于追随者副本,它只做一件事:向领导者副本发送请求,请求领导者把最新生产的消息发给它,这样它能保持与领导者的同步。

image.png



目录
相关文章
|
2月前
|
消息中间件 数据挖掘 Kafka
Apache Kafka流处理实战:构建实时数据分析应用
【10月更文挑战第24天】在当今这个数据爆炸的时代,能够快速准确地处理实时数据变得尤为重要。无论是金融交易监控、网络行为分析还是物联网设备的数据收集,实时数据处理技术都是不可或缺的一部分。Apache Kafka作为一款高性能的消息队列系统,不仅支持传统的消息传递模式,还提供了强大的流处理能力,能够帮助开发者构建高效、可扩展的实时数据分析应用。
112 5
|
2月前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
110 2
|
3月前
|
消息中间件 存储 分布式计算
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
53 4
|
3月前
|
消息中间件 NoSQL Kafka
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
92 5
|
3月前
|
消息中间件 存储 druid
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
大数据-156 Apache Druid 案例实战 Scala Kafka 订单统计
66 3
|
3月前
|
消息中间件 存储 分布式计算
大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解
大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解
102 4
|
3月前
|
消息中间件 大数据 Kafka
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(二)
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(二)
47 2
|
3月前
|
消息中间件 NoSQL 大数据
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(一)
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(一)
60 1
|
3月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
252 0

热门文章

最新文章