概述: 作用
一、Kafka的优势如下:
-
削峰: 防止数据在高峰期生产太快,来不及消费, 造成数据丢失,节点崩溃
-
高吞吐量、低延迟:kafka每秒可以处理几十万条消息,它的延迟最低只有几毫秒;
-
可扩展性:kafka集群支持热扩展;
-
持久性、可靠性:消息被持久化到本地磁盘,并且支持数据备份防止数据丢失;
-
容错性: 允许集群中节点故障(若副本数量为n,则允许n-1个节点故障);
-
高并发: 支持数千个客户端同时读写。
二、Kafka适合以下应用场景:
-
日志收集: 一 个公司可以用Kafka可以收集各种服务的log,通过kafka以统一接口服务的方式开放给各种consumer;
-
消息系统:解耦生产者和消费者、缓存消息等;
-
用户活动跟踪:kafka经常被用来记录web用户或者app用户的各种活动,如浏览网页、搜索、点击等活动,这些活动信息被各个服务器发布到kafka的topic中,然后消费者通过订阅这些topic来做实时的监控分析,亦可保存到数据库;
-
运营指标: kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的集中反馈,比如报警和报告;
-
流式处理: 比如spark streaming和storm。
下载:
kafka的官网:kafka官网地址
先到官方网站下载相关tgz包
然后进行解压安装,将安装好的文件进行修改
来到kafka目录:
mkdir data #创建一个data 文件,存放消息队列中的数据
修改server.properties 文件
vim config/server.properties
# 修改broker的id, 这个数字必须是一个整型且唯一的
broker.id=0
# kafka 运行日志存放的路径
log.dirs=/opt/module/kafka/logs
# 配置zookeeper 集群
zookeeper.connect=hadoop202:2181,hadoop203:2181,hadoop204:2181
注: 到这里kafka的集群配置就完成了, 因为kafka是需要借助zookeeper集群来进行的,所以要使用的话,需要先进行开启zookeeper集群
开启kafka在每一台机器上我这里就直接配置脚本开启了:
case $1 in
"start")
for kk in hadoop202 hadoop203 hadoop204
do
echo ==========$kk:kafka启动=======
ssh $kk "/opt/module/kafka/bin/kafka-server-start.sh -daemon /opt/module/kafka/config/server.properties"
done
;;
"stop")
for kk in hadoop202 hadoop203 hadoop204
do
echo ==========$kk:kafka关闭=======
ssh $kk "/opt/module/kafka/bin/kafka-server-stop.sh"
done
;;
"*")
echo "请输入正确的参数start/stop!"
;;
esac
单个开启:
bin/kafka-server-start.sh -daemon config/server.properties
单个关闭:
bin/kafka-server-stop.sh
创建主题,删除
创建: bin/kafka-topics.sh --zookeeper hadoop202:2181 --create --replication-factor 3 --partitions 1 --topic first
删除: bin/kafka-topics.sh --zookeeper hadoop202:2181 --delete --topic first
查看全部: bin/kafka-topics.sh --zookeeper hadoop202:2181 --list
查看某个主题的详情: bin/kafka-topics.sh --zookeeper hadoop202:2181 --describe
–topic first
生产者和消费者:
生产者:
bin/kafka-console-producer.sh --broker-list hadoop202:9092 --topic first
消费者:
(推荐使用第二种,9.0版本之前使用的是将offset存储到zookeeper上,这就需要消费者 需要与zookeeper经常进行通讯,后面版本就使用了将offset存储在topic上)
bin/kafka-console-consumer.sh --zookeeper hadoop202:2181 --topic first bin/kafka-console-consumer.sh --bootstrap-server hadoop202:9092 --topic first
指定消费的配置
bin/kafka-console-consumer.sh --bootstrap-server hadoop202: 9092 --topic first --consumer.config config/consumer.properties (指定具体的消费配置文件,不指定的话,会随机给一个组名)
加上–from-beginning从头开始重新读取数据
注:
- offset0.9版本之前存储zookeeper, 但是由于需要消费者频繁的与zookeeper做交互,在0.9及之后,将offset存储在了topic中
- 上面所作的操作命令,不管是bootstrap-list也好,还是zookeeper 也罢,所连接的服务器哪一个都行,因为zookeeper和 kafka都是以集群工作的,之间都会有通信(但是在实际的环境下,最好还是都进行连接一下, 因为可能出现我们去连接的那一个机器出现异常问题宕机)