kafka笔记1--基础介绍与集群安装
最近需要了解一下kafka相关基础与原理, 因此发了些时间系统的学习了些, 将笔记贴在此处,以便于后续查阅!
1 kafka 基础介绍
-
消息队列
消息队列中间件是分布式系统中重要的组件,主要解决应用耦合、异步消息、流量削锋等问题, 实现高性能、高可用、可伸缩和最终一致性架构, 是大型分布式系统不可缺少的中间件. 其结构大致如下图所示, 包括点对点模式、发布订阅模式。
- 点对点模式
点对点模式(一对一,消费者主动拉取数据,消息收到后消息清除),点对点模型通常是一个基于拉取或者轮询的消息传送模型,这种模型从队列中请求信息,而不是将消息推送到客户端。这个模型的特点是发送到队列的消息被一个且只有一个接收者接收处理,即使有多个消息监听者也是如此。 - 发布订阅模式
发布/订阅模式(一对多,数据生产后,推送给所有订阅者),发布订阅模型则是一个基于推送的消息传送模型。发布订阅模型可以有多种不同的订阅者,临时订阅者只在主动监听主题时才接收消息,而持久订阅者则监听主题的所有消息,即使当前订阅者不可用,处于离线状态。 - 消息队列优点:
1解耦,
2冗余,
3扩展性,
4灵活性&峰值处理能力,
5可恢复性,
6顺序保证性,
7缓冲,
8异步通信。
- 点对点模式
-
kafka 基础
kafka 是一个分布式的流平台,其结构如下图所示。
其具备如下3个重要的功能。
1)发布和订阅记录流,类似于消息队列或企业消息传递系统;
2)以容错持久的方式存储记录流;
3)处理记录流。
其通常用于两大类应用程序。第一,建立一个实时流数据管道,以便于可靠地在系统或应用程序之间获取数据;第二,构建实时流应用程序,以转换或响应数据流。
除此之外,Kafka在一个或多个可以跨越多个数据中心的服务器上作为集群运行; Kafka集群将流记录存储在称为主题的不同类别中;每个记录由一个键、一个值和一个时间戳组成。
在api方面, kafka有5类这还要的api,包括Producer API,Consumer API, Streams API ,Connector API,Admin API。
2 kafka 集群安装
笔者使用3台主机,对应h01,h02, h03,将其写在/etc/hosts中.
2.1 zookeeper 安装
- 修改配置
修改配置文件
修改zoo.cfg文件
dataDir=/home/xg/soft/datadir/zookeeper
server.1=h01:2888:3888
server.2=h02:2888:3888
server.3=h03:2888:3888
scp zoo.cfg xg@h03:~/soft/cdh5.6/zookeeper-3.4.5-cdh5.6.0/conf
依次在h01 h02 h03上执行新建目录命令
mkdir -p ~/soft/datadir/zookeeper 新建目录
依次新建myid文件,内容分别为1、2、3
echo 1 >~/soft/datadir/zookeeper/myid (h02为2、h03为3) - 启动&停止
在用户目录通过zkServer 的start启动,stop 停止;
~/soft/cdh5.6/zookeeper-3.4.5-cdh5.6.0/bin/zkServer.sh start|status|stop
启动后成功后通过jps可以查看到对应进程:$ jps -l|grep -i Quo 16168 org.apache.zookeeper.server.quorum.QuorumPeerMain
- 常用命令
- zkCli 登录
~/soft/cdh5.6/zookeeper-3.4.5-cdh5.6.0/bin/zkCli.sh -server h01:2181 #h01可以更换为h02、h03 - zkCli 帮助文档
登录后:help - 查看命令
ls / [zk: h01:2181(CONNECTED) 0] ls / [cluster, controller, brokers, zookeeper, yarn-leader-election, hadoop-ha, admin, isr_change_notification, log_dir_event_notification, controller_epoch, consumers, latest_producer_id_block, config]
- 获取节点信息
get /zookeeper - 创建节点信息
create /aa “hellozk” - 修改节点信息
set /aa “testaa” - 删除节点数据
rmr /aa - 设置监听
get /aa watch
在其它机器上更改aa节点数据,会收到通知信息
- zkCli 登录
2.2 kafka 安装
- 修改配置
broker.id=0 注:h02,h03分别为1,2
log.dirs=/home/xg/soft/logdir/kafka 此处建议修改为实际需要的目录
zookeeper.connect=h01:2181,h02:2181,h03:2181此处也可以使用默认的localhost:2181 - 启动
3个机器上都执行如下命令即可,启动成功后会出现对应的kafka进程,如下:
bin/kafka-server-start.sh config/server.properties &$ jps -l|grep -i kafka 23735 kafka.Kafka
或者 bin/kafka-server-start.sh -daemon config/server.properties
3 kafka 常用命令
- 创建topic
bin/kafka-topics.sh --create --zookeeper h01:2181 --replication-factor 1 --partitions 1 --topic test
bin/kafka-topics.sh --create --zookeeper h01:2181 --replication-factor 2 --partitions 2 --topic test2
bin/kafka-topics.sh --create --bootstrap-server h01:9092 --replication-factor 2 --partitions 2 --topic test3 - 查看topic
bin/kafka-topics.sh --list --zookeeper h01:2181
bin/kafka-topics.sh --list --bootstrap-server localhost:9092 --topic test2 - 查看详细信息
$ bin/kafka-topics.sh --describe --bootstrap-server localhost:9092 --topic test2 Topic:test2 PartitionCount:2 ReplicationFactor:2 Configs:segment.bytes=1073741824 Topic: test2 Partition: 0 Leader: 1 Replicas: 0,1 Isr: 1,0 Topic: test2 Partition: 1 Leader: 2 Replicas: 1,2 Isr: 2,1
- 生产消息
$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test3 >msg 01 >msg 02 >^C
- 消费消息
$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --from-beginning --topic test3 msg 01 msg 02 ^CProcessed a total of 2 messages
- 删除topic
bin/kafka-topics.sh --delete --bootstrap-server h01:9092 --topic test3 - 查看所有topic
$ bin/kafka-topics.sh --zookeeper localhost:2181 --list __consumer_offsets k8s-test sre-k8s-log
4 注意事项
- 单机版本默认只能被本访问,若需要设置所有机器可访问,那么需要设置listeners为0.0.0.0,advertised.listeners 为实际机器的 ip:port
listeners = PLAINTEXT://0.0.0.0:9092 advertised.listeners=PLAINTEXT://192.xxx.xx.153:9092
5 说明
- 环境说明
测试系统为 debian9.11
kafka 版本为 kafka_2.12-2.3.0
zookeeper 版本为 zookeeper-3.4.5-cdh5.6.0 - 参考文献
1 消息队列技术介绍
2 kafka 学习笔记及案例源码
3 kafka 官网
4 Kafka Shell基本命令(包括topic的增删改查)