kfaka简单介绍
1. Kafka是什么?
- 分布式的流式数据处理平台
- 可以用它来发布和订阅流式的记录,这一方面与消息队列或者企业消息系统类似
- 它将流式的数据安全地存储在分布式、有副本备份、容错的集群上 可以用来做流式计算
- 如果说其它中间件是高速公路,而Kafka则是停车场,也可以将消息直接与数据库交互
2. Kafka适合什么样的场景? 它可以用于两大类别的应用:
- 构造实时流数据管道,它可以在系统或应用之间可靠地获取数据。 (相当于message queue)
- 构建实时流式应用程序,对这些流数据进行转换或者影响。 (就是流处理,通过kafka stream topic和topic之间内部进行变化)
3. Kafka的架构体系
分布式集群:
Kafka作为一个集群,运行在一台或者多台服务器上. Kafka 通过 topic 对存储的流数据进行分类。
Kafka有四个核心的API:
- The Producer API 允许一个应用程序发布一串流式的数据到一个或者多个Kafka topic。
- The Consumer API 允许一个应用程序订阅一个或多个 topic ,并且对发布给他们的流式数据进行 处理。
- The Streams API 允许一个应用程序作为一个 ,消费一个或者多个topic产生的输入流, 然后生产一个输出流到一个或多个topic中去,在输入输出流中进行有效的转换。
- The Connector API 允许构建并运行可重用的生产者或者消费者,将Kafka topics连接到已存在的 应用程序或者数据系统。比如,连接到一个关系型数据库,捕捉表(table)的所有变更内容。
在Kafka中,客户端和服务器使用一个简单、高性能、支持多语言的 TCP 协议.此协议版本化并且向下兼 容老版本, 我们为Kafka提供了Java客户端,也支持许多其他语言的客户端。
安装Kafka(Java1.8及以上)
1.下载安装包:https://www.apache.org/dyn/closer.cgi?path=/kafka/2.3.0/kafka_2.12-2.3.0.tgz(集成了Windows版)
2.下载好,目录结构如下:
其中config配置目录里面有个文件server.properties,这是配置Kafka服务端的一些配置信息,以下是常用的(zk为存储Kafka集群信息)
启动 kafka
1. 首先要启动zk,需要指定其配置文件 类似redis.conf(进入到安装目录)
bin/zookeeper-server-start.sh config/zookeeper.properties &
备注:Kafka集群使用zookeeper来存储元信息,在生产环境下你应该独立安装一个zookeeper集群。学 习可以使用Kafka安装包中内置的zookeeper,启动一个单实例的zookeeper
2. 启动Kafka 服务端,指向server配置文件
bin/kafka-server-start.sh config/server.properties & --启动
bin/kafka-server-stop.sh config/server.properties & --停止
Kafka集群搭建
- 【生产集群】在其他机器上同样安装kafka,配置它们连接到同一个zookeeper集群、它们的唯一id,数据目录,启动Broker实例即加入集群。
- 【学习用集群】在同一台机器上启动多个broker实例,按如下步骤操作来搭建一个3节点的集群
1. 拷贝配置文件
cp config/server.properties config/server-1.properties
cp config/server.properties config/server-2.properties
2. 修改配置文件:
config/server-1.properties、config/server-1.properties:
broker.id=1
listeners=PLAINTEXT://:9093
log.dirs=自定义地址
broker.id=2
listeners=PLAINTEXT://:9094
log.dirs=自定义地址
bin/kafka-server-start.sh config/server-1.properties & --启动
bin/kafka-server-start.sh config/server-2.properties & --启动
4.【启动失败说明】
如果启动第二个或第三个broker时提示内存不够用,可以做如下调整:
- 调大你的虚拟机的内存(1G 或更多)
调小Kafka的堆大小,默认是1G,生产用时可以调大。这里学习用可以调为256M(不能太小 了,启动时会heap OOM)
vi bin/kafka-server-start.sh
--修改
export KAFKA_HEAP_OPTS="-Xmx256M -Xms256M" 最大最小设为同一值(减少内存的申请和 回收)
5.启动结果:并用zk服务查看broker节点状态
创建topic
--创建topic
(base) humingmingdeMacBook-Pro:bin humingming$ ./kafka-topics.sh --create --bootstrap-server 192.168.0.101:9092 --replication-factor 3 --partitions 1 --topic my-1-topic
--订阅该topic
(base) humingmingdeMacBook-Pro:bin humingming$ ./kafka-topics.sh --describe --bootstrap-server 192.168.0.101:9092 --topic my-1-topic
Topic:my-1-topic PartitionCount:1 ReplicationFactor:3 Configs:segment.bytes=1073741824
Topic: my-1-topic Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
Topic: my-1-topic Partition: 0 Leader: 2 Replicas: 2,1,0 Isr: 2,1,0
- --partitions 1 分片数(分片是对主题topic的数据的分布式存储,对数据的物理分割,类似于分库分表),这个主题有几个分片,一般是创建消息的时候会指定看是否需要分片
- --replication-factor 3 表示备份因子,副本数为3(哪个副本挂了,不怕丢,3个副本在分布式环境分别放在三台服务器,我这里仅仅是单台服务器)
- --topic my-1-topic 主题名
- partition:0 分片号
- Leader:0 leader 副本在2号broker上
- Isr:2,1,0 in sync 处于同步状态的broker,哪些当前boker是活着的,与leader节点是联通的
这里是创建了一个 有一个分片,每个分片有3个副本的主题,一般一台机器有一个broker,分片的一个副本放在一个broker上
发送消息
--往某一台机器上发送消息
(base) humingmingdeMacBook-Pro:bin humingming$ ./kafka-console-producer.sh --broker-list 192.168.1.101:9092 --topic my-1-topic
>hello kafka
>hello kafka2
--消费消息 从开始进行消费
(base) humingmingdeMacBook-Pro:bin humingming$ ./kafka-console-consumer.sh --bootstrap-server 192.168.1.101:9092 --from-beginning --topic my-1-topic
hello kafka
hello kafka2
图形化管理工具
目前fkaka市面上很多开源的图形化管理工具(类似rocketmq的admin控制台),但真正好用的几乎没有,我推荐的这个是稍微好用的点 地址:url,可以实时监控:Kafka集群状态Topic、Consumer Group列表、图形化展示topic和consumer之间的关系、图形化展示consumer的Offset、Lag等信息
java -cp KafkaOffsetMonitor-assembly-0.2.0.jar \
com.quantifind.kafka.offsetapp.OffsetGetterWeb \
--zk zk-server1,zk-server2 \
--port 8088 \
--refresh 10.seconds \
--retain 2.days
给大家解释以下这条启动命令的含义,
其中,offsetStorage目前只支持kaka,zk按照host1:port1,host2:port2…的格式去写即可,port为开启web界面的端口号,refresh为刷新时间,retain为数据保留时间(单位seconds, minutes, hours, days)。当然,你也可以把这个命令写成脚本,保存起来。