一、Kafka入门

一、消息中间件

1、为什么使用消息中间件?

异步
解耦
削峰填谷

2、异步

3、解耦

异步处理使整个数据操作流程解耦,如果短信服务或者积分服务异常,不影响前面重要的功能。

面试问题点:

所以尽量将不重要的服务放到下游,且不要产生依赖关系,如果下游服务产生耦合,那么这里的异步操作将失去意义。

4、削峰填谷

双十一秒杀、春节12306场景有流量洪峰,但是后端服务器短时间内无法处理大量请求,使用消息中间件可以缓存涌入进来的大量请求,后端服务慢慢消费这些请求,尽最大努力处理请求。

也不用为了这些“偶然”场景去搭建更高性能的服务集群,节约成本。

5、开发解耦

使用MQ可以避免直接调用接口。
如果B还未提供接口,A也不必等着

二、Kafka安装与配置

1、下载

Apache Kafka

2、解压

上传到Linux虚拟机,我这里使用的是阿里云服务器。

3、使用zookeeper启动

进入kafka的bin目录,编写两个启动脚本,一个启动zookeeper,一个启动kafka。

# 启动zookeeper脚本
#!/bin/bash
source /root/kafka/kafka_2.13-3.8.0/bin/zookeeper-server-start.sh /root/kafka/kafka_2.13-3.8.0/config/zookeeper.properties &


# 启动kafka脚本
#!/bin/bash
source /root/kafka/kafka_2.13-3.8.0/bin/kafka-server-start.sh /root/kafka/kafka_2.13-3.8.0/config/server.properties &

4、直接启动

1)获取kafka唯一标识

# 获取kafka唯一标识
sh kafka-storage.sh random-uuid

使用uuid方式启动kafka后,可以看到返回一个uuid,这个uuid是kafka集群中节点的唯一标识。

2)格式化存储目录

 sh kafka-storage.sh format -t 25Z4D7QnRBKhQlw-VcDd8A -c ../config/kraft/server.properties

把相关的存储目录格式化,保存数据文件。

 3)启动kafka

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

三、kafka的命令

1、topic - 主题

kafka-topics.sh

# 创建主题
sh kafka-topics.sh --bootstrap-server localhost:9092 --create --topic allwe-topic --replication-factor 1 --partitions 8

# 查询主题
sh kafka-topics.sh --bootstrap-server localhost:9092 --list

# 查询主题明细
sh kafka-topics.sh --bootstrap-server localhost:9092 --describe

2、生产者

kafka-console-producer.sh

# 启动生产者 - 指定一个主题
sh kafka-console-producer.sh --broker-list localhost:9092 --topic allwe-topic

3、消费者

kafka-console-consumer.sh

# 启动消费者 - 指定一个主题
sh kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic allwe-topic --from-beginning --consumer.config ../config/consumer.properties

四、kafka中的基本概念

1、主题和分区

主题:表示一类消息。

分区:认为是一个文件。可以理解为一个分区就是一个队列。

分区的意义:提高消费的并发程度。由于消费消息相对于生产消息很慢,可以增加分区去提高消费的并发度,从而平衡生产和消费的速度。

2、消息和批次

kafka内部只存储byte数组,消费者取消息时也只是取byte数组。

对于很大的数据,kafka会将这个大的数据分为多段小的数据,分批次发送。

3、生产者和消费者

生产者生产消息

消费者消费消息

4、偏移量、消费者群组

消费者根据偏移量确定上次消费到哪了,拿着偏移量继续消费。

当启动多个消费者时,可以组成一个消费者群组。

在群组消费者群组场景下,每个分区的消息只能由一个消费者消费,但是一个消费者可以消费多个分区的消息。这样做的目的是确保消息的顺序。

5、kafka中生产和消费流程

6、kafka硬件配置的选择

磁盘:非常依赖磁盘

        吞吐量:存储消息的速度。

        容量:堆积消息的能力,只有达到一定条件才会删除过时文件。

网络:比较依赖网络,网络的吞吐量对kafka集群的影响很大。

内存:影响消费速度,需要将数据从磁盘拿到内存中进行消费。建议单独部署。

CPU:依赖性不强

7、配置文件

server.properties

# 配置为正数。在集群场景下,如果出现网络ip变化,有了这个参数就不用担心
broker.id=0   

# 配置kafka的端口号
listeners=PLAINTEXT://localhost:9092

# 网络请求线程数
num.network.threads=3

# 数据存储目录
log.dirs=/tmp/kafka-logs

# 创建主题时,默认分区数
num.partitions=1

# 在重启或启动时,加载数据的线程数,建议和cpu核数对应
num.recovery.threads.per.data.dir=1

# 配置日志保存时间,默认是168小时,过期自动清理
log.retention.hours=168

# 如果以zookeeper启动,指定zookeeper的ip+port
zookeeper.connect=localhost:2181
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值