kafka概念扫盲(1)

简介: kafka概念扫盲

一、kafka概述

1.1、定义


Kakfa是一个分布式的基于发布/订阅模式的消息队列(message queue),主要应用于大数据的实时处理领域


1.2、消息队列


1.2.1、传统的消息队列&新式的消息队列的模式

网络异常,图片无法展示
|






上面是传统的消息队列,比如一个用户要注册信息,当用户信息写入数据库后,后面还有一些其他流程,比如发送短信,则需要等这些流程处理完成后,在返回给用户


而新式的队列是,比如一个用户注册信息,数据直接丢进数据库,就直接返回给用户成功


1.2.2、使用消息队列的好处


A、        解耦


B、        可恢复性


C、        缓冲


D、        灵活性&峰值处理能力


E、         异步通信



1.2.3、消息队列的模式


A、点对点模式


消息生产者发送消息到消息队列中,然后消息消费者从队列中取出并且消费消息,消息被消费后,队列中不在存储。所以消息消费者不可能消费到已经被消费的消息;队列支持存在多个消费者,但是对于一个消息而言,只会 有一个消费者可以消费;如果想发给多个消费者,则需要多次发送该条消息


B】发布/订阅模式(一对多,消费者消费数据之后不会清除消息)


消息生产者将消息发布到topic中,同时有多个消息消费者(订阅)消费该消息,和点对点的方式不同,发布到topic的消息会被所有的订阅者消费;但是数据保留是期限的,默认是7天,因为他不是存储系统;kafka就是这种模式的;有两种方式,一种是是消费者去主动去消费(拉取)消息,而不是生产者推送消息给消费者;另外一种就是生产者主动推送消息给消费者,类似公众号



1.3、kafka的基础架构


网络异常,图片无法展示
|





kafka的基础架构主要有broker、生产者、消费者组构成,当前还包括zookeeper


生产者负责发送消息


broker负责缓冲消息,broker中可以创建topic,每个topic又有partition和replication的概念


消费者组负责处理消息,同一个消费者组的中消费者不能消费同一个partition中的数据,消费者组主要是提高消费能力,比如之前是一个消费者消费100条数据,现在是2个消费者消费100条数据,可以提高消费能力;所以消费者组的消费者的个数要小于partition的个数,不然就会有消费者没有partition可以消费,造成资源的浪费


注:但是不同的消费者组的消费者是可以消费相同的partition数据


Kakfa如果要组件集群,则只需要注册到一个zk中就可以了,zk中还保留消息消费的进度或者说偏移量或者消费位置


0.9版本之前偏移量存储在zk


0.9版本之后偏移量存储在kafka中,kafka定义了一个系统的topic,专用用来存储偏移量的数据;


为什么要改?主要是考虑到频繁更改偏移量,对zk的压力较大,而且kafka本身自己的处理也较复杂



1.4、kafka安装


A、Kafka的安装只需要解压安装包就可以完成安装


1


tar -zxvf kafka_2.11-2.1.1.tgz -C /usr/local/


 


B、查看配置文件

[root@es1 config]# pwd
/usr/local/kafka/config
[root@es1 config]# ll
total 84
-rw-r--r--. 1 root root  906 Feb  8  2019 connect-console-sink.properties
-rw-r--r--. 1 root root  909 Feb  8  2019 connect-console-source.properties
-rw-r--r--. 1 root root 5321 Feb  8  2019 connect-distributed.properties
-rw-r--r--. 1 root root  883 Feb  8  2019 connect-file-sink.properties
-rw-r--r--. 1 root root  881 Feb  8  2019 connect-file-source.properties
-rw-r--r--. 1 root root 1111 Feb  8  2019 connect-log4j.properties
-rw-r--r--. 1 root root 2262 Feb  8  2019 connect-standalone.properties
-rw-r--r--. 1 root root 1221 Feb  8  2019 consumer.properties
-rw-r--r--. 1 root root 4727 Feb  8  2019 log4j.properties
-rw-r--r--. 1 root root 1925 Feb  8  2019 producer.properties
-rw-r--r--. 1 root root 6865 Jan 16 22:00 server-1.properties
-rw-r--r--. 1 root root 6865 Jan 16 22:00 server-2.properties
-rw-r--r--. 1 root root 6873 Jan 16 03:57 server.properties
-rw-r--r--. 1 root root 1032 Feb  8  2019 tools-log4j.properties
-rw-r--r--. 1 root root 1169 Feb  8  2019 trogdor.conf
-rw-r--r--. 1 root root 1023 Feb  8  2019 zookeeper.properties



C、修改配置文件server.properties


设置broker.id 这个是kafka集群区分每个节点的唯一标志符


网络异常,图片无法展示
|





D、设置kafka的数据存储路径

网络异常,图片无法展示
|





注:这个目录下不能有其他非kafka的目录,不然会导致kafka集群无法启动


E、设置是否可以删除topic,默认情况先kafka的topic是不允许删除的




网络异常,图片无法展示
|




F、Kafka的数据保留的时间,默认是7天


网络异常,图片无法展示
|





G、Log文件最大的大小,如果log文件超过1g会创建一个新的文件



网络异常,图片无法展示
|




网络异常,图片无法展示
|





H、Kafka连接的zk的地址和连接kafka的超时时间


网络异常,图片无法展示
|





J、默认的partition的个数


网络异常,图片无法展示
|





1.5、启动kafka


A、启动方式1,kafka只能单节点启动,所以每个kakfa节点都需要手动启动,下面的方式阻塞的方式启动


网络异常,图片无法展示
|





B、启动方式2,守护的方式启动,推荐



网络异常,图片无法展示
|




1.6、kafka操作


A、查看当前kafka集群已有的topic


网络异常,图片无法展示
|





注意:这里连接的zookeeper,而不是连接的kafka


B、创建topic,指定分片和副本个数



网络异常,图片无法展示
|




注:


replication-factor:副本数


replication-factor:分区数


Topic:主题名


如果当前kafka集群只有3个broker节点,则replication-factor最大就是3了,下面的例子创建副本为4,则会报错



网络异常,图片无法展示
|




C、删除topic



网络异常,图片无法展示
|




D、查看topic信息




网络异常,图片无法展示
|




网络异常,图片无法展示
|





1.7、启动生产者生产消息,kafka自带一个生产者和消费者的客户端


A、启动一个生产者,注意此时连的9092端口,连接的kafka集群


网络异常,图片无法展示
|





B、启动一个消费者,注意此时连接的还是9092端口,在0.9版本之前连接的还是2181端口

网络异常,图片无法展示
|






这里我们启动2个消费者来测试一下





网络异常,图片无法展示
|


注:如果不指定的消费者组的配置文件的话,默认每个消费者都属于不同的消费者组


C、发送消息,可以看到每个消费者都能收到消息



网络异常,图片无法展示
|




网络异常,图片无法展示
|



网络异常,图片无法展示
|







D、Kakfa中的实际的数据


网络异常,图片无法展示
|

 

 

网络异常,图片无法展示
|

 

 


二、kafka架构深入

网络异常,图片无法展示
|






Kafka不能保证消息的全局有序,只能保证消息在partition内有序,因为消费者消费消息是在不同的partition中随机的


2.1、kafka的工作流程


Kafka中的消息是以topic进行分类的,生产者生成消息,消费者消费消息,都是面向topic的


网络异常,图片无法展示
|






Topic是一个逻辑上的概念,而partition是物理上的概念


每个partition又有副本的概念


每个partition对应于一个log文件,该log文件中存储的就是生产者生成的数据,生产者生成的数据会不断的追加到该log的文件末端,且每条数据都有自己的offset,消费者都会实时记录自己消费到了那个offset,以便出错的时候从上次的位置继续消费,这个offset就保存在index文件中


kafka的offset是分区内有序的,但是在不同分区中是无顺序的,kafka不保证数据的全局有序


2.2、kafka原理


由于生产者生产的消息会不断追加到log文件的末尾,为防止log文件过大导致数据定位效率低下,Kafka采用分片和索引的机制,将每个partition分为多个segment,每个segment对应2个文件----index文件和log文件,这2个文件位于一个相同的文件夹下,文件夹的命名规则为topic名称+分区序号


网络异常,图片无法展示
|




Indx和log的文件的文件名是当前这个索引是最小的数据的offset


Kafka如何快速的消费数据呢?


网络异常,图片无法展示
|




Index文件中存储的数据的索引信息,第一列是offset,第二列这这个数据所对应的log文件中的偏移量,就像我们去读文件,使用seek()设置当前鼠标的位置一样,可以更快的找到数据


如果要去消费offset为3的数据,首先通过二分法找到数据在哪个index文件中,然后在通过index中offset找到数据在log文件中的offset;这样就可以快速的定位到数据,并消费


所以kakfa虽然把数据存储在磁盘中,但是他的读取速度还是非常快的


相关文章
|
1月前
|
消息中间件 存储 负载均衡
Apache Kafka核心概念解析:生产者、消费者与Broker
【10月更文挑战第24天】在数字化转型的大潮中,数据的实时处理能力成为了企业竞争力的重要组成部分。Apache Kafka 作为一款高性能的消息队列系统,在这一领域占据了重要地位。通过使用 Kafka,企业可以构建出高效的数据管道,实现数据的快速传输和处理。今天,我将从个人的角度出发,深入解析 Kafka 的三大核心组件——生产者、消费者与 Broker,希望能够帮助大家建立起对 Kafka 内部机制的基本理解。
79 2
|
2月前
|
消息中间件 存储 分布式计算
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
大数据-72 Kafka 高级特性 稳定性-事务 (概念多枯燥) 定义、概览、组、协调器、流程、中止、失败
41 4
|
2月前
|
消息中间件 NoSQL Kafka
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
大数据-52 Kafka 基础概念和基本架构 核心API介绍 应用场景等
74 5
|
2月前
|
消息中间件 存储 分布式计算
大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解
大数据-53 Kafka 基本架构核心概念 Producer Consumer Broker Topic Partition Offset 基础概念了解
82 4
|
2月前
|
消息中间件 大数据 Kafka
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(二)
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(二)
35 2
|
2月前
|
消息中间件 NoSQL 大数据
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(一)
大数据-77 Kafka 高级特性-稳定性-延时队列、重试队列 概念学习 JavaAPI实现(一)
42 1
|
2月前
|
消息中间件 NoSQL Kafka
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
大数据-116 - Flink DataStream Sink 原理、概念、常见Sink类型 配置与使用 附带案例1:消费Kafka写到Redis
195 0
|
4月前
|
消息中间件 存储 Kafka
kafka基础概念二
【8月更文挑战第11天】
43 6
|
5月前
|
消息中间件 存储 Java
全网把Kafka概念讲的最透彻的文章,别无二家
消息队列老大哥Kafka在官网的介绍是这么说的,真是霸气:全球财富前100强公司有超过80%信任并使用Kafka。Kafka目前在GitHub目前也已经有star数27.6k、fork数13.6k。大家好,我是南哥。一个对Java程序员进阶成长颇有研究的人,今天我们开启新的一篇Java进阶指南,本期的对象是Kafka。Kafka历史Star趋势图本文收录在我开源的《Java学习面试指南》中,一份涵盖Java程序员所需掌握核心知识、面试重点的Java指南。希望收到大家的 ⭐ Star ⭐支持。
122 1
全网把Kafka概念讲的最透彻的文章,别无二家
|
6月前
|
消息中间件 大数据 Kafka
高效处理大数据:Kafka的13个核心概念详解
大家好,我是小米!今天我将为大家深入解析Kafka的核心概念,包括消息、批次、主题、分区、副本、生产者、消费者、消费组等内容。通过这篇文章,你将全面了解Kafka的工作机制和应用场景,为你的大数据处理提供有力支持。准备好了吗?让我们开始吧!
174 4

热门文章

最新文章