theme: smartblue
highlight: agate
理论
1. kafka是什么?
Kafka
是分布式发布-订阅消息系统,它最初是由LinkedIn
公司开发的,之后成为Apache
项目的一部分,Kafka
是一个分布式,可划分的,冗余备份的持久性的日志服务,它主要用于处理流式数据。
2. 为什么要使用kafka
分布式消息服务器,使用场景无非三种
缓冲和削峰
- 上游数据时有突发流量,下游可能扛不住,或者是下游没有足够的机器去处理数据请求,会导致服务器坍塌.此时消息服务,可以在其中承担缓冲作用,将消息请求缓存在
kafka
中,下游的服务再在可以承担压力的情况下慢慢消费.
- 上游数据时有突发流量,下游可能扛不住,或者是下游没有足够的机器去处理数据请求,会导致服务器坍塌.此时消息服务,可以在其中承担缓冲作用,将消息请求缓存在
解耦
- A系统发送数据到BCD三个系统, A通过接口发送数据,当新增E系统我们需要新增相应的接口去处理E系统,中途如果去掉B系统,还得手动去掉对应接口.引入消息服务,可以A将消息发送到
kafka
然后谁需要,自己去消息服务订阅消费即可
- A系统发送数据到BCD三个系统, A通过接口发送数据,当新增E系统我们需要新增相应的接口去处理E系统,中途如果去掉B系统,还得手动去掉对应接口.引入消息服务,可以A将消息发送到
+ 异步 - 当A系统分布要往BCD三个服务数据库写入数据,这是A需要调用BCD三个服务,并分别写入数据再返回给A系统处理结果,由于是同步执行的,用户这边需要等待一段时间才会有返回结果,此时的对用户而言很不友好,如果直接将写数据的操作放到消息服务器,不管后续操作情况.这是对用户而言操作是瞬间的,显然可用性 极高
3. kafka和其它MQ的区别
优点: + 可扩展。Kafka
集群可以透明的扩展,增加新的服务器进集群。 + 高性能。Kafka
性能远超过传统的ActiveMQ、RabbitMQ
等,Kafka
支持Batch
操作。 + 容错性。Kafka
每个Partition
数据会复制到几台服务器,当某个Broker
失效时,Zookeeper
将通知生产者和消费者从而使用其他的Broker
。
部署安装
安装环境 Linux
系统 Centos7.6
1. 包下载
进入服务器指定文件夹目录,根据个人喜欢指定.我这边是/usr/local/
,
1. cd /usr/local/
进入指定目录 2. 下载包 wget https://repo.huaweicloud.com/apache/kafka/2.2.2/kafka_2.11-2.2.2.tgz
3. 解压 tar -xvf kafka_2.11-2.2.2.tgz
4. 重名名 mv kafka_2.11-2.2.2 kafka
2. 部署准备
kafka
是基于分布式消息管理,因此需要一个媒介对kafka
的Broker
进去管理,zookeeper
是一款高效的分布式管理工具,所以使用kafka
之前需要先搭建zk
zookeeper
安装部署参考往期博客修改
kafka
的配置文件- 进入指定目录
cd /usr/local/kafka
- 修改配置
vi config/server.properties
注意需要修改的地方如下 ```properties listeners=PLAINTEXT://:9092
改服务器的ip
advertised.listeners=PLAINTEXT://192.168.10.126:9092
日志文件夹 可以修改也可以默认不变
log.dirs=/tmp/kafka-logs
定义分区数 默认为1
num.partitions=4
zk的所有节点 如果是集群是多个节点 单机是一个节点
zookeeper.connect=192.168.10.122:2181 `` 3. 启动
kafka服务,窗口启动和后台挂起启动,建议初次启动窗口启动方便查看日志是否启动成功
./bin/kafka-server-start.sh ./config/server.properties` ,指定配置文件启动
正常启动成功如下所示
使用ctrl+c
关闭当前服务,使用后台启动方式 nohup ./bin/kafka-server-start.sh ./config/server.properties &
然后使用命令ps -ef | grep kafka
查看是否启动成功,成功如下所示
3. 相关操作命令
- 查看当前服务中所有的
topic
xshell ./bin/kafka-topics.sh --zookeeper [服务名或ip]192.168.10.122:2181 --list
- 创建
topic
指定名称为test
分区数为4副本数为2cmd ./bin/kafka-topics.sh --zookeeper 192.168.10.122:2181 --create --replication-factor 2 --partitions 3 --topic test
删除
topic
注意:删除topic的时候需要在server.properties中设置delete.topic.enable=true否则只是标记删除,并没有真正删除。cmd ./bin/kafka-topics.sh --zookeeper 192.168.10.122:2181 \ --delete --topic test
查看
topic
详情cmd bin/kafka-topics.sh --zookeeper 192.168.10.122:2181 \ --describe --topic first
- 发送消息 ```cmd ./bin/kafka-console-producer.sh \ --broker-list 192.168.10.122:9092 --topic test
如果创建kafka是集群启动的话 --broler-list 后面的多个地址使用,拼接
输入完上面的命令成功后会有">"标志,就可以输入数据了
输入数据,需要删除的时候按住ctrl 在点击backspace就可以删除了。
hello world
6. 消费消息
cmd
--from-beginning 从头开始消费所有信息
./bin/kafka-console-consumer.sh --bootstrap-server 192.168.10.122:9092 --from-beginning --topic test ```
- 修改分区,由于
kafaka
内部数据处理过于复制,目前只有增加分区操作 没有减少分区功能cmd ./bin/kafka-topics.sh --zookeeper 192.168.10.122:2181 --alter --topic test --partitions 6
kafka在java中实战(请见下期)
博客参考csdn大佬 https://blog.youkuaiyun.com/qq_26803795/article/details/105682276