kafka基础、原理介绍

本文介绍了Kafka在大数据领域的应用场景,如消息传递、数据集成和流计算。深入讲解了Kafka的架构,包括Broker、Record、生产者、消费者、Topic、Partition、Replica、Segment和Consumer Group等核心概念,并探讨了Kafka为何采用Pull模式。最后,文章提供了非SpringBoot和SpringBoot项目中使用Kafka的开发指南。
摘要由CSDN通过智能技术生成

1. kafka介绍

kafka最早诞生就是为了收集用户活跃数、用户页面访问等,并不是作为mq的一般需求而诞生的。
早期的ActiveMQ可以满足,但是经常出翔阻塞、服务不可用的状况。
为了更好满足需求,于是乎就诞生了kafka。

1.1 应用场景

  • 大数据领域
  • 数据收集
  • 流计算集成
1.1.1 消息传递
消息传递就是发送数据,作为TCP HTTP 或者RPC,实现异步、削峰、解耦。因为kafka的吞吐量更高,所以在超大量数据的情况下优势明显。
  1. 用户行为收集,监控、实时处理、报表
  2. 实现日志聚合,讲分布式的日志可以通过kafka配合其他组件实现日志监控 ELK
  3. 应用指标监控,监控业务数据或者运维相关指标(cpu、内存、磁盘)
1.1.2 数据集成和流计算
数据集成是指把kafka的数据导入Hadpoop、HBase等离线数据仓库,实现数据分析。
流是指作为没有边界、源源不断产生的数据,流计算是指对stream做实时计算。

2. kafka架构分析

在这里插入图片描述

2.1 Broker介绍

Broker作为kafka的一个组件,主要是用户存储和转发消息的,它做的事情就像是中介,kafka的一台服务器就是一个broker,对外开发发送、接收消息的端口默认为9092。生产者和消费者都需要和broker建立连接才能收发消息。

2.2 Record(message)消息介绍

客户端之间传输的数据叫做消息,或者叫做记录(一个名称而已)。在客户端中,Record一般是一个kv键值对。
生产者封装消息类 ProducerRecord,消费者封装类是ConsumerRecord。(感觉message叫的习惯一点)
有数据传输就会涉及到传输格式问题,所以消息是可以被格式化的。kafka官方提供的java api是有提供对消息序列化和反序列的。

2.3 生产者

发送消息的一方叫做生产者。
消息发送可以是指定批次大小发送,也可以是在若干时间内批次发送。(当固定时间内并没有足够的批次消息)

2.4 消费者

一般来说,所有的组件都会面临者对数据获取方式的选择,一种是pull,一种是push,这里其实比较奇怪,两个动作,在同一时间内说出来,主语是改变了的。
push是说Broker主动去推送数据给消费者,主语是Broker服务器。
pull是说消费者主动去找服务器Broker拉取数据,主语是消费者。
kafka只有pull模式,具体原因相信多数人能找到答案。减少不利的模式选择,才是好的做法。
消费者可以自己控制一次获取多少消息,默认是500

2.5 topic

生产者和消费者对应的生成消费数据的关系,通过topic来关联,这个概念其实多数开发者都是清除的,但是没有像rabbitMQ一样那么的复杂,kafka是全字符串匹配。消费者可以同时绑定消费多个topic,但是一般不建议。

2.6 Partition

kafka引入了一个分区概念,一个topic的消息可以放在不同的分区中存放。每个topic建议设置分区数量为boker的数量。
每个partiton有一个物理目录。在配置的数据目录下(日志就是数据):/tmp/kafka-logs/
> mytopic-0
> mytopic-1

在这里插入图片描述

2.7 Partition副本Replica

partition数据只有一份的话,如果宕机或者网络故障,那么对应的分区数据就不可用。这个时候就需要对partition做副本。有副本就有选举,这个功能是借助zk完成的。

2.8 Segment

kafka的数据是放在后缀 .log的文件里面。如果一个partition只有一个log文件,消息不断的追加,这个log文件就会越来越大,这个时候要检索效率就很低。
于是就把partition切分开来,切分出来的单位就叫做段segment。
默认的存储路径/tmp/kafka-logs/
每个segment至少有1个数据文件和2个索引文件,这3个文件是成套出现的。

在这里插入图片描述

2.9 Consumer Group

如果生产者产生的消息速度过快,就会造成broker的堆积,影响broker的性能。
consumer group消费族概念,在代码中通过group id来配置。消费同一个topic的消息不一定时同一个组,只有group id相同的消费者才是同一个消费组。

由于分区数量和消费者的数量可能存在差异:当分区数量大于消费者数据量时,部分消费者可能出现同时消费多个partition。但是如果消费者数量大于partiton的数据量,却不会出校多个消费者消费相同的partiton。在同一消费组中,是不能同时消费同一个partiton

2.10 consumer offset

由于partiton中的数据是顺序切消费不删除,所以在消费之断开链接后重新继续消费的时候,需要延续上次的消费位置来继续消费。
kafka对消息进行了编号,用来标志唯一消息。这个编号我们把它叫做offset偏移量。
offset记录者吓一跳将要发送给consumer的消息序号。
这个消费者跟partition之间的偏移量没有保存在zk,而是直接保存在服务器中的。

3. kafka java 开发

3.1 非springboot项目

  • 依赖一如
<dependency>
	<groupId>org.apache.kafka</groupId>
	<artifactId>kafka-clients</artifacId>
	<version>2.6.0</vsersion>
</dependency><
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值