消息中间件 - kafka入门

1. 简单介绍 - 为什么要学kafka?

不论大厂还是小公司,都在逐步向分布式架构靠拢,各种分布式技术吹的也是漫天飞。不少同学去面试,都离不开消息中间件。但是呢,面试问到消息中间件,又都会问到kafka,所以很有必要学一下kafka。

2. kafka到底是个啥?

kafka 表面上是一个消息中间件,实际上功能很多,还可以作为存储来使用。因为kafka本身就是基于磁盘设计的,所以它在存储上也有一定的优势。

专业的话术不多说,说多了也理解不了记不住,唯有用到才能真正领略其精髓。

3.  现有消息中间件的对比

记住这个图就行。

4. 开始入门使用

4.1 准备工作

(1)下载kafka 到本地,解压。

(2)下载zookeeper到本地,解压。

解释一下:kafka为什么会需要zookeeper?因为kafka天生优点多,其在集群方面又比rabbitmq等mq优秀,用到了集群就要进行节点之间到分布式调度,这是zookeeper到一个体现。kafka本身自带zookeeper jar包,这个jar包放在libs目录下,这样一来kafka太依赖zookeeper来,当zookeeper挂了,那么kafka也不高可用了。所以实际中人们往往把zookeeper单独出去作为一个组件管理,并且也建立zookeeper的集群。

zookeeper的使用不多说,请参考我的文章《zookeeper 入门(一)单机zk》 https://blog.csdn.net/u011672034/article/details/100047681

4.2 介绍以下kafka的配置文件server.properties

在学习各种中间件的时候会留心到,往往都是从配置文件开始启动,所以如果你是自学成才,那么从配置文件入手是一个了解工具快速便捷的途径。

config/server.properties 文件中有几个重要配置,简单挑几个说一下:

# 这个是建立集群时用到的broker id,必须是整数。

# 啥是broker?broker就是一台独立的kafka主机,也可以理解为集群中一个kafka节点。每个broker的id 都不一样,用broker.id可以# 理解为它是一个别名,当一个broker的ip改变时,broker.id不变,容易辨认。

broker.id=0

# 日志的位置,kafka强大之处是存储,就是日志都采用文件存储到磁盘上,所以需要指定这个。这个文件可以指定多个位置。

log.dirs=/tmp/kafka-logs

# 分区数,一般会设置到大一点,不过不会无限大,一般是8。

num.partitions=1

# 日志的存储时间,当日志存满分区,则拿最新更新时间去和当前时间做对比,看这个时间是否超过这个168小时,如果超过就会删除这个日志

log.retention.hours=168

# 日志片段的size最大是多少。1073741824是指1G。这个配置是说,当日志片段存满1G了,我就关闭这个日志片段,注意是关闭不是删除,如果关闭后再超过168小时,则被删除。

log.segment.bytes=1073741824

# 这个代表要连接哪个zookeeper,如果只有一个zk,多个kafka就连同一个zk,如果有多个zk,kafka则分别去连接对应的zk,具体集群zk怎么连,这里留一个小疑问。???。多个zk可以用逗号分隔。比如

zookeeper.connect=localhost:2181

zookeeper.connect=192.168.0.1:2181,192.168.0.2:2181,192.168.0.3:2181

4.3 简单启动一下

(1)启动zk,步骤略

(2)启动kafka

(我的是mac os系统)

cd到kafka目录下启动 $ bin/kafka-server-start.sh config/server.properties

至此启动成功。

5. 了解基本概念

kafka的概念没有太多。了解以下几个就可以:

(1)消息和批次

消息:顾名思义,就是生产者生产的数据,消费者要消费的数据。

批次:生产者可以一次性生产多个消息发送到kafka。

(2)主题和分区

主题:和rabbitmq一样,也是分主题的,不做过多解释。

分区:分区的概念在kafka中独有的。类似数据库中要分库分表的操作。分区就是partition。一个partition就是一个文件。

          分区类型还分首领分区和副本分区(小弟分区),二者是方便复制机制的。

面试中有时会问到:kafka为什么要分区,一个文件不好吗?

这个和性能相关。如果把一个文件放在一个机器上进行分区,其实是和不分区是一样的,都是基于磁盘的,但是如果一个文件很大,把一个文件分区后分别放在不同的机器上,性能就高很多了。

(3)生产者、消费者、偏移量、消费者群组

生产者:略。(简单易懂)

消费者:略。(简单易懂)

偏移量:就是一个整数,消息的位置。

消费者群组:如果有一个消费者跑路(失败)了,那么消息就由剩下的消费者均摊。一个分区只能被一个消费者消费,一个分区不能被多个消费者消费。

(4)Broker和集群

Broker:就是一台独立的kafka主机。

为什么要完成集群?

集群用来复制,做信息冗余,为了高可用(当一个broker或者分区失败,还有副本顶上,高可用一般就是这个目的)。

比较着来说rabbitmq集群很弱,而kafka在设计之初就加强了集群的能力。(kafka的优点很多)

(5)首领

首领是指分区的首领,和机器没关系。比如:分区0的首领是在Broker1上,然后分区0还有一个小弟在Broker2上,分区1的首领在Broker2上,分区1的小弟分区在Broker1上。也可以首领和小弟分区都在一个Broker上。首领和小弟分区之间是进行复制的。首领只有一个,小弟可以是多个。

场景举例:生产者发一个消息到分区0的首领那里,这里消息是不能发到小弟分区的,然后首领给小弟分区通过管道给它一个备份(就是复制)。总结:就是消息先发到首领分区,然后复制到小弟分区。

复制是分区复制的,首领复制给小弟,做了消息的冗余,如果首领挂了,小弟分区能起到作用。

面试官会问:为什么选择kafka?

kafka是多生产者和多消费者的;

kafka是基于磁盘的存储,像rabbitmq等mq还要另外定制去做持久化,而kafka天生持久化,这是它的一个优势。

高伸缩性:可以随时增加一个分区或者broker(方法:复制一个修改下配置就可以,无需停掉kafka)。

6. kafka常见的使用场景

(1)活动跟踪

很多人面试过,如今日头条。像头条关注的就是活动跟踪,比如浏览的时候点击了什么图片,点击的东西及浏览的记录,比如一天点击头条点击100次,点击相关的图片点击了80次,这个数据就是放到kafka里面去了。然后kafka可以对接大数据的流处理 spark, Storm, Flink。在你下次打开的时候给你推送过来,包括感兴趣的,甚至付费的。所以处理数据之前可能用了kafka做存储。

(2)传递消息

消息中间件

(3)收集指标和日志

使用kafka的中国公司比较多,大部分都完成收集日志的功能。

(4)提交日志

比如我总担心我的数据库会挂掉,我把对数据库的操作 insert delete update都保存在日志文件里,万一数据库挂了,我可以通过kafka中记录的日志恢复。

(5)流处理(实时双11,12点1万亿)

目前来说最常见的是活动跟踪,往往比下个订单更重要,这是培养用户的习惯。

7.  小结:

以上是简单的对kafka有一个认识,达到不陌生的程度。知道kafka是什么?核心概念有哪些?kafka优点?怎么玩单机版的kafka?以及kafka能解决哪些问题?

记住下面几个图:

                          分区

                           偏移量

                      kafka集群

 

       为什么选择kafka(kafka能干什么)

 

 

下面文章讲kafka的生产者和消费者是怎么玩的。未完待续。。。

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值