Kafka 的生成者、消费者、broker 的基本概念

createh54个月前 (01-21)技术教程39

kafka是一款基于发布与订阅的消息系统。它一般被称为“分布式提交日志”或者“分布式流平台”。文件系统或者数据库提交日志用来提供所有事物的持久化记录,通过重建这些日志可以重建系统的状态。同样地,kafka的数据是按照一定顺序持久化保存的,可以按需读取。

1、kafka拓扑结构

2、Kafka的特点

同时为分布和订阅提供高吞吐量。据了解,Kafka每秒可以生产约25万条消息(50MB),每秒处理55万条消息(110MB)这里说条数,可能不上特别准确,因为消息的大小可能不一致;

可进行持久化操作,将消息持久化到到磁盘,以日志的形式存储,因此可用于批量消费,例如ETL,以及实时应用程序。 通过将数据持久化到硬盘以及replication防止数据丢失。
分布式系统,易于向外拓展。所有的Producer、broker和consumer都会有多个,均为分布式。无需停机即可拓展机器。

消息被处理的状态是在consumer端维护,而不是由server端维护,当失败时能自动平衡。
支持Online和offline的场景。

3、Kafka的核心概念

名词 解释
Producer 消息的生成者
Consumer 消息的消费者
ConsumerGroup 消费者组,可以并行消费Topic中的partition的消息
Broker 缓存代理,Kafka集群中的一台或多台服务器统称broker.
Topic Kafka处理资源的消息源(feeds of messages)的不同分类
Partition Topic物理上的分组,一个topic可以分为多个partion,每个partion是一个有序的队列。partion中每条消息都会被分 配一个 有序的Id(offset)
Message 消息,是通信的基本单位,每个producer可以向一个topic(主题)发布一些消息
Producers 消息和数据生成者,向Kafka的一个topic发布消息的 过程叫做producers
Consumers 消息和数据的消费者,订阅topic并处理其发布的消费过程叫做consumers

3.1 Producers的概念

消息和数据生成者,向Kafka的一个topic发布消息的过程叫做producers
Producer将消息发布到指定的Topic中,同时Producer也能决定将此消息归属于哪个partition;比如基于round-robin方式 或者通过其他的一些算法等;
异步发送批量发送可以很有效的提高发送效率。kafka producer的异步发送模式允许进行批量发送,先将消息缓存到内存中,然后一次请求批量发送出去。

3.2 broker的概念:

Broker没有副本机制,一旦broker宕机,该broker的消息将都不可用。
Broker不保存订阅者的状态,由订阅者自己保存。
无状态导致消息的删除成为难题(可能删除的消息正在被订阅),Kafka采用基于时间的SLA(服务保证),消息保存一定时间(通常7天)后会删除。
消费订阅者可以rewind back到任意位置重新进行消费,当订阅者故障时,可以选择最小的offset(id)进行重新读取消费消息

3.3 Message组成

Message消息:是通信的基本单位,每个producer可以向一个topic发布消息。
Kafka中的Message是以topic为基本单位组织的,不同的topic之间是相互独立的,每个topic又可以分成不同的partition每个partition储存一部分
partion中的每条Message包含以下三个属性:
offset long
MessageSize int32
data messages的具体内容

3.4 Consumers的概念

消息和数据消费者,订阅topic并处理其发布的消息的过程叫做consumers. 在kafka中,我们可以认为一个group是一个“订阅者”,一个topic中的每个partions只会被一个“订阅者”中的一个consumer 消费,不过一个consumer可以消费多个partitions中的消息 注: Kafka的设计原理决定,对于一个topic,同一个group不能多于partition个数的consumer同时消费,否则将意味着某些 consumer无法得到消息

原文链接:http://click.aliyun.com/m/1000302400/

本文为阿里云原创内容,未经允许不得转载。

相关文章

java方法的定义和调用(java中定义方法和调用方法)

/*** 测试方法的定义和调用* 定义方法:修饰符(例如public/static)+返回值类型(例如int/double void为空不返回)+方法名+(形参){}* 调用方法: 方法名+(实参);...

Java方法全解析:让你的代码高效优雅,快速学会方法的定义和调用

当涉及Java语言中方法的定义和调用,我们需要先了解方法的基本概念和语法结构。方法是Java中用于执行特定任务的代码块,它们用于组织和封装代码,使程序更加模块化和易于维护。在本讲解中,我会逐步介绍方法...

java:举例说明继承的概念(java继承的基本概念)

在现实生活中,继承一般指的是子 女继承父辈的财产。在程序中,继承描述的是事物之间的所属关系,通过继承可以使多种事物之间形成一种关系体系。例如猫和狗都属于动物,程序中便可以描述为猫和狗继承自动物,同理,...

Java核心基础之自定义注解(java自定义编译时注解)

本文转载自掘金,作者-jack_xu。主页:https://juejin.cn/user/1802854801877191认识注解注解( Annotation )相当于一种标记,在程序中加入注解就等于...

「软帝学院」什么是java?学Java能做什么?Java有什么特性?

什么是java?学Java能做什么?Java有什么特性?Java 技术既是一种高级的面向对象的编程语言,也是一个平台。Java 技术基于 Java 虚拟机(Java virtual machine,J...

阿里巴巴Java开发手册中的DO、DTO、BO、AO、VO、POJO定义

常用文件夹分层:pojo? vo (与前端交互的所有对象,包括接参和返回)? query (查询的筛选条件,前端传参和后端内部传参通用)? entity (数据库表基础对象)? dto(后端内部传输用...