热门课程

免费试听

上课方式

开班时间

当前位置: 首页 -   文章 -   新闻动态 -   正文

快速了解分布式消息技术Kafka

知了堂姐
2024-07-08 17:22:16
0

一、简介

1.Kafka是什么

是一个分布式、支持分区的(partition)、多副本的(replication),基于zookeeper协调的分布式消 息系统,可以实时的处理大量数据.

2.它有哪些主流的消息队列(中间件)

  • RabbitMQ:由Erlang(二郎)语言编写。吞吐量比较低,不容易进一步开发扩展。
  • RocketMQ:由java编写,阿里开发,社区活跃度低,万一不维护,需要自己公司研发。
  • Redis:用作消息队列时,数据量大小在10k以内速度快,数据量大时会非常慢
  • Kafka:Apache开发,由Scala和java编写,适合大数据实时计算以及日志收集

3.为什么要使用消息队列

主要用来缓冲任务削峰:上游数据有时会突发流量,下游可能扛不住,或者下游没有足够多的机器来保证处理,此时kafka在中间可以起到一个缓冲作用,把消息暂存在kafka集群中,下游服务就可以按照 自己的节奏慢慢处理任务。

4.消息队列的应用场景

用户管理中,当成功写入数据库后的回调信息中要作两件事:

  • 发送注册邮件
  • 发送注册短信

如果使用消息队列,则在收到异步通知后就直接响应用户,把后两件事放在队列中慢慢处理。

串行处理任务

并行处理任务(多线程问题)

kafka消息队列处理

5. kafka的分布式实现

NameServer在kafka中使用的是zookeeper

6.Kafka特性

解耦、高吞吐量、低延迟、高并发、容错性、可扩展性、持久性和可靠性

解耦:使用kafka后,任务的处理者(consumer)与任务的发布者(producer)之间没有依赖关系。

高吞吐量、低延迟:kafka每秒可处理几十万条消息,延迟可低到几毫秒。每个topic可以分多个 partition,consumer group对分区可并行读取

可扩展性:kafka集群支持热展持久性和可靠性消息被持久化到本地磁盘,并支持数据备份防止数据丢失。

容错性:允许集群中节点失败,只要还剩下一个就能正常工作

高并发:支持数千个客户端的读写

7.消息的分类

  • 点对点:一个队列可以有多个消费者一起消费,但一个消息只能被一个消费者消费。
  • 发布与订阅

消息被持久化到一个topic中,消费者可消费该topic中所有数据,同一条数据可被多个消费者消 费,数据被消费后不会删除。

、windows安装Kafka

1、安装zookeeper

1、下载安装包 https://archive.apache.org/dist/zookeeper/

2、解压并进入zookeeper目录,D:\zookeeper\conf

3、重命名“zoo_sample.cfg”为“zoo.cfg”

4、打开“zoo.cfg”,编辑:dataDir=D:\zookeeper\data dataLogDir=D:\zookeeper\dataLog

5、添加系统变量:ZOOKEEPER_HOME=D:\zookeeper

6、编辑path系统变量,添加路径:D:\zookeeper\bin

7、启动zookeeper: 打开cmd,输入: zkserver

8、命令提示如下则启动成功:

2、安装kafka

1、下载安装包: http://kafka.apache.org/downloads

注意要下载二进制版本

2、解压并进入kafka目录, D:\kafka\config

3、编辑server.properties, log.dirs=D:\kafka\kafka-logs

修改安装kafka所在的IP地址:(也可以不修改)

4、确认zookeeper.connect=localhost:2181 是否正确 Kafka会按照默认,在9092端口上运行,并连接zookeeper的默认端口:2181

5、 进入Kafka安装目录D:\Kafka,右键,选择“打开命令窗口”选项,打开命令行,输入:

.\bin\windows\kafka-server-start.bat .\config\server.properties

注意: 启动前请确保zookeeper已启动运行

3、测试

1、创建主题,进入Kafka安装目录D:\Kafka,右键,选择“打开命令窗口”选项,打开命令行,输入:

.\bin\windows\kafka-topics.bat —create —zookeeper localhost:2181 —replication-factor 1 — partitions 1 —topic test

注意:不要关了这个窗口

2、查看主题输入:

.\bin\windows\kafka-topics.bat —list —zookeeper localhost:2181

3、创建生产者,进入Kafka安装目录D:\Kafka,右键,选择“打开命令窗口”选项,打开命令行,输入:

.\bin\windows\kafka-console-producer.bat —broker-list localhost:9092 —topic test

注意:不要关了这个窗口

4、创建消费者,进入Kafka安装目录D:\Kafka,右键,选择“打开 命令窗口”选项,打开命令行,输入:

.\bin\windows\kafka-console-consumer.bat —bootstrap-server localhost:9092 —topic test — from-beginning

5、完成


四、Linux启动、创建


1、启动

bin/kafka-server-start.sh config/server.properties

2、创建topic

bin/kafka-topics.sh —create —zookeeper localhost:2181 —replication-factor 1 —partitions 1 — topic test

3、查看topic

bin/kafka-topics.sh -list -zookeeper localhost:2181

4、启动producer

bin/kafka-console-producer.sh —broker-list localhost:9092 —topic test

5、启动consumer

bin/kafka-console-consumer.sh —bootstrap-server localhost:9092 —topic test —from-beginning

6、删除topic

./bin/kafka-topics.sh —delete —zookeeper localhost:2181 —topic zb_lb_report_data

五、面试题

1.kafka是怎么体现消息顺序性的?

在一个分区内能过offset来维护顺序性,不同分区无法保证。

2.kafka新建的分区会在哪个目录中创建?

在配置文件指定的logs目录下创建:first-0,first-1

3.kafka中的分区器、序列化器、拦截器是否了解?之间的 顺序是什么?

  • kafka在发送消息前先经过拦截器处理
  • 序列化器转换为字节数组
  • 分区器指定分区

4.什么情况会造成重复消费?什么情况会造成漏消费?

重复消费?

生产者:ack=all时生产者会重复发消息会重复消费,可通过幂等机制解决

消费者:消费者采用先消费后提交offset的方式,如果在消费结束后提交offset时,失败了, 则会重复消费同一条记录。可通过同步提交offset的方式解决。

漏消费?

生产者:ack=0或1时,kafka在生产者发送了数据后可能没存储成功,从而漏消费。

消费者:消费者采用先提交offset,后消费,可能会漏消费。可先消费后提交解决

5.kafka内部有topic吗?有什么用?

__consumer_offsets,用来记录所有topic的所有分区被消费者消费的offset

6.如何保证消息只能被消费一次?

producer端

ack=all

p.put("enable.indempotence",true);//幂等机制

consumer端

关闭自动提交功能

每消费一次数据后手动提交

好啦,本次内容就分享到这儿了,欢迎大家讨论交流~

上一篇:初识Redis

下一篇:ES7 操作文档

大家都在看

html5与css常规面试技术题库

2024-07-08 浏览次数:0

项目整合微信扫码登录(含代码!复制即用)

2024-07-08 浏览次数:0

软件测试常见问题,软件测试工程师需要掌握什么相关...

2024-07-08 浏览次数:0

前端开发包括哪些内容?前端开发学什么

2024-07-08 浏览次数:0

虚拟机运行架构

2024-07-08 浏览次数:0

干货|为了阅读,请避免间接代码!

2024-07-08 浏览次数:0
最新资讯