目录
1.1 定义
kafka 面试非常的重要,做实时或者准实时项目必用工具(绕不开)。Kafka就是用来存储消息的,消息中间件。
Kafka是分布式的发布—订阅消息系统。它最初由LinkedIn(领英)公司发布,使用Scala语言编写,于2010年12月份开源,成为Apache的顶级项目。Kafka是一个高吞吐量的、持久性的、分布式发布订阅消息系统。它主要用于处理活跃live的数据(登录、浏览、点击、分享、喜欢等用户行为产生的数据)。
kafka 在大数据技术中,属于实时计算架构中的一员悍将!Scala语言的底层是Java。越底层速度越快。
Kafka传统定义:Kafka是一个分布式的基于发布/订阅模式的消息队列(Message Queue),主要应用于大数据实时处理领域。
Java工程师: 一辈子都在研究高并发。
大数据工程师:做分析(离线、实时)【分析过往数据,也可以预测未来】
发布/订阅:消息的发布者不会将消息直接发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接收感兴趣的消息。
Kafka最新定义 : Kafka是 一个开源的分布式事件流平台(Event Streaming Platform),被数千家公司用于高性能数据管道、流分析、数据集成和关键任务应用。IBM--全球最大的信息技术和业务解决方案公司,xxx领导者。
日常由于磁盘的读取速度是100M/S 左右,日常flume --> Hadoop 是可以的,但是双十一的话,采集速度超过100M/S 就会造成 Hadoop无法处理的情况,此时可以使用KAFKA.
1.2、kafka的中的组成成员
kafka四大核心
生产者API
允许应用程序发布记录流至一个或者多个kafka的主题(topics)。消费者API
允许应用程序订阅一个或者多个主题,并处理这些主题接收到的记录流StreamsAPI
允许应用程序充当流处理器(stream processor),从一个或者多个主题获取输入流,并生产一个输出流到一个或 者多个主题,能够有效的变化输入流为输出流。ConnectorAPI
允许构建和运行可重用的生产者或者消费者,能够把kafka主题连接到现有的应用程序或数据系统。例如:一个连 接到关系数据库的连接器可能会获取每个表的变化。
1.3 消息队列(中间件)
目前企业中比较常见的 消息 队列产 品主 要有Kafka、ActiveMQ 、RabbitMQ 、 RocketMQ 等。
在大数据场景主要采用 Kafka 作为消息队列。在 JavaEE 开发中主要采用 ActiveMQ、 RabbitMQ、RocketMQ。
Kafka: 是最适用于大数据技术的消息中间件。
RabbitMQ: Erlang编写。
RocketMQ: 阿里出品,纯java,性能特别好,但是特别大,不好安装,还收费。
ActiveMQ: 实现了SUN公司当年JMS规范的,学习成本不高,也比较好用,性能不是特别高。
1.3.1 传统消息队列的应用场景
传统的消息队列的主要应用场景包括:缓存/消峰(削峰填谷)、解耦和异步通信。
- 解耦 各系统之间通过消息系统这个统一的接口交换数据,无须了解彼此的存在
重要的作用
- 冗余 部分消息系统具有消息持久化能力,可规避消息处理前丢失的风险
- 扩展 消息系统是统一的数据接口,各系统可独立扩展
- 峰值处理能力 消息系统可顶住峰值流量,业务系统可根据处理能力从消息系统中获取并处理对应量的请求
重要的作用
- 可恢复性 系统中部分键失效并不会影响整个系统,它恢复会仍然可从消息系统中获取并处理数据
- 异步通信 在不需要立即处理请求的场景下,可以将请求放入消息系统,合适的时候再处理
场景解释:
缓冲/削峰(萧峰):有助于控制和优化数据流经过系统的速度,解决生产消息和消费消息的处理速度不一致的情况。
削峰填谷
12306 网站 --> 天天崩
阿里团队介入,帮它搞搞。规律:当一个事物产生会牵动另一些事物的发生,11 --> 阿里技术不断演化(技术不断的更新)
阿里为了搞11 --> 服务器 --> 阿里云诞生了。
双十一假如每秒有10亿人/s ,但是集群处理能力只有1千万人/s ,此时是顶不住压力的,所以可以中间添加一个消息队列来解决这个问题。
解耦:允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束(媒婆)
3000万/单身男性。
异步通信:允许用户把一个消息放入队列,但并不立即处理它,然后在需要的时候再去处理它们。
1.3.2 消息队列的两种模式
1.4 Kafka 基础架构
ISR:In-Sync Replicas isr 是一个副本的列表,里面存储的都是能跟leader 数据一致的副本
1)Producer:消息生产者,就是向 Kafka broker 发消息的客户端。
2)Consumer:消息消费者,向 Kafka broker 取消息的客户端。
3)Consumer Group(CG):消费者组,由多个 consumer 组成。消费者组内每个消 费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
4)Broker:一台 Kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker 可以容纳多个 topic。
5)Topic:可以理解为一个队列,生产者和消费者面向的都是一个 topic。
6)Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列。
7)Replica:副本。一个 topic 的每个分区都有若干个副本,一个 Leader 和若干个 Follower。
8)Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 Leader。
9)Follower:每个分区多个副本中的“从”,实时从 Leader 中同步数据,保持和 Leader 数据的同步。Leader 发生故障时,某个 Follower 会成为新的 Leader。
1.5、kafka的名词概念
- Kafka服务:
- Topic:主题,Kafka处理的消息的不同分类。
- Broker:消息服务器代理,Kafka集群中的一个kafka服务节点称为一个broker,主要存储消息数据。存在硬盘中。每个topic都是有分区的。
- Partition:Topic物理上的分组,一个topic在broker中被分为1个或者多个partition,分区在创建topic的时候指定。
- Message:消息,是通信的基本单位,每个消息都属于一个partition
- Kafka服务相关
- Producer:消息和数据的生产者,向Kafka的一个topic发布消息。
- Consumer:消息和数据的消费者,定于topic并处理其发布的消息。
- Zookeeper:协调kafka的正常运行。
名词解释:
第一个:Topic
kafka将消息以topic为单位进行归类
topic特指kafka处理的消息源(feeds of messages)的不同分类。
topic是一种分类或者发布的一些列记录的名义上的名字。kafka主题始终是支持多用户订阅的;也就是说,一 个主题可以有零个,一个或者多个消费者订阅写入的数据。
在kafka集群中,可以有无数的主题。
生产者和消费者消费数据一般以主题为单位。更细粒度可以到分区级别。
第二个:分区
Partitions:分区数:控制topic将分片成多少个log,可以显示指定,如果不指定则会使用 broker(server.properties)中的num.partitions配置的数量。
一个broker服务下,是否可以创建多个分区?
可以的,broker数与分区数没有关系; 在kafka中,每一个分区会有一个编号:编号从0开始
每一个分区的数据是有序的说明-数据是有序 如何保证一个主题下的数据是有序的?(生产是什么样的顺序,那么消费的时候也是什么样的顺序)
topic的Partition数量在创建topic时配置。
Partition数量决定了每个Consumer group中并发消费者的最大数量。
Consumer group A 有两个消费者来读取4个partition中数据;Consumer group B有四个消费者来读取4个 partition中的数据
第三个:副本数
副本数(replication-factor):控制消息保存在几个broker(服务器)上,一般情况下等于broker的个数
一个broker服务下,是否可以创建多个副本因子?
不可以;创建主题时,副本因子应该小于等于可用的broker数。 副本因子过程图副本因子的作用:让kafka读取数据和写入数据时的可靠性。
副本因子是包含本身|同一个副本因子不能放在同一个Broker中。
如果某一个分区有三个副本因子,就算其中一个挂掉,那么只会剩下的两个钟,选择一个leader,但不会在其 他的broker中,另启动一个副本(因为在另一台启动的话,存在数据传递,只要在机器之间有数据传递,就 会长时间占用网络IO,kafka是一个高吞吐量的消息系统,这个情况不允许发生)所以不会在零个broker中启 动。
如果所有的副本都挂了,生产者如果生产数据到指定分区的话,将写入不成功。
lsr表示:当前可用的副本
第四个:kafka Partition offset
任何发布到此partition的消息都会被直接追加到log文件的尾部,每条消息在文件中的位置称为offset(偏移量),
offset是一个long类型数字,它唯一标识了一条消息,消费者通过(offset,partition,topic)跟踪记录。
第五个:分区数和消费组的关系。
标签:--,分区,broker,kafka,topic,消息,消息中间件,Kafka From: https://blog.csdn.net/weixin_53709379/article/details/143605391消费组: 由一个或者多个消费者组成,同一个组中的消费者对于同一条消息只消费一次。某一个主题下的分区数,对于消费组来说,应该小于等于该主题下的分区数。如下所示:
如:某一个主题有4个分区,那么消费组中的消费者应该小于等于4,而且最好与分区数成整数倍
1 2 4
同一个分区下的数据,在同一时刻,不能被同一个消费组的不同消费者消费总结:分区数越多,同一时间可以有越多的消费者来进行消费,消费数据的速度就会越快,提高消费的性能.