本文目录
1. Kafa介绍
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。该项目的目标是为处理实时数据提供一个统一、高吞吐、低延迟的平台。其持久化层本质上是一个“按照分布式事务日志架构的大规模发布/订阅消息队列”,[3]这使它作为企业级基础设施来处理流式数据非常有价值。此外,Kafka可以通过Kafka Connect连接到外部系统(用于数据输入/输出),并提供了Kafka Streams——一个Java流式处理库。 -------摘自维基百科
1.1 Kafka应用场景
- 日志收集:可以用Kafka可以收集各种服务的Log,通过Kafka以统一接口服务的方式开放 给各种Consumer;
- 消息系统:解耦生产者和消费者、缓存消息等;
- 用户活动跟踪: Kafka经常被用来记录Web用户或者App用户的各种活动,如浏览网页、搜索、点击 等活动,这些活动信息被各个服务器发布到Kafka的Topic中,然后消费者通过订阅这些Topic来做实时的 监控分析,亦可保存到数据库;
- 运营指标: Kafka也经常用来记录运营监控数据。包括收集各种分布式应用的数据,生产各种操作的 集中反馈,比如报警和报告;
- 流式处理: 比如Spark Streaming和Storm。
1.2 核心概念
-
Producer
消息的生产者
-
Consumer
消息的消费者。 消费者订阅一个或多个主题,并按照消息生成的顺序读取它们。
-
Consumer Group
每一个Consumer属于一个特定的Consumer Group,消费者可以通过指定
group.id
,来确定其所在消费组。group_id一般设置为应用的逻辑名称。比如多个订单处理程序组成一个消费组,可以设置group_id 为"order_process"。消费组均衡地给消费者分配分区,每个分区只由消费组中一个消费者消费。 -
Broker
一个独立的Kafka 服务器被称为broker。 broker 为消费者提供服务,对读取分区的请求作出响应,返回已经提交到磁盘上的消息。
-
Topic
用来对消息进行分类,每个进入到Kafka的信息都会被放到一个Topic下。
-
Partition
是Kafka下数据存储的基本单元,这个是物理上的概念。同一个topic的数据,会被分散的存储到多个partition中,这些partition可以在同一台机器上,也可以是在多台机器上。
优势在于:有利于水平扩展,避免单台机器在磁盘空间和性能上的限制,同时可以通过复
制来增加数据冗余性,提高容灾能力。为了做到均匀分布,通常partition的数量通常是Broker
Server数量的整数倍。
1.3 Kafka架构
Kafka存储的消息来自任意多被称为“生产者”(Producer)的进程。数据从而可以被分配到不同的“分区”(Partition)、不同的“Topic”下。在一个分区内,这些消息被索引并连同时间戳存储在一起。其它被称为“消费者”(Consumer)的进程可以从分区查询消息。Kafka运行在一个由一台或多台服务器组成的集群上,并且分区可以跨集群结点分布。
Kafka高效地处理实时流式数据,可以实现与Storm、HBase和Spark的集成。作为聚类部署到多台服务器上,Kafka处理它所有的发布和订阅消息系统使用了四个API,即生产者API、消费者API、Stream API和Connector API。
Kafka有四个主要API:
- 生产者API:支持应用程序发布Record流。
- 消费者API:支持应用程序订阅Topic和处理Record流。
- Stream API:将输入流转换为输出流,并产生结果。
- Connector API:执行可重用的生产者和消费者API,可将Topic链接到现有应用程序。
以上图片和文字摘自维基百科,https://zh.wikipedia.org/wiki/Kafka
2. Kafka安装与配置
- 安装环境:centos7
- jdk1.8
- zookeeper3.7
- kafka 2.12-3.0.0
2.1 安装Java
-
下载JDK,上传至服务器,并解压。
-
配置环境变量
vim /etc/profile
在profile文件最下面添加如下配置(JAVA_HOME目录改成自己的):
export JAVA_HOME=/usr/software/jdk1.8.0_261 export CLASSPATH=.:${JAVA_HOME}/jre/lib/rt.jar:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar export PATH=$PATH:${JAVA_HOME}/bin
# 生效 source /etc/profile # 验证 java -version
2.2 安装Zookeeper
PS:Kafka中已经集成Zookeeper,可以不用单独安装Zookeeper,直接使用集成的。
到Apache ZooKeeper下载Zookeeper。下载地址:https://zookeeper.apache.org/releases.html
-
下载完成后,将zookeeper压缩包上传到linux系统
-
解压
tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
-
修改配置⽂件名称
cd conf mv zoo_sample.cfg zoo.cfg
-
修改zoo.cfg中的data和Log属性
# the directory where the snapshot is stored. # do not use /tmp for storage, /tmp here is just # example sakes. dataDir=/usr/software/apache-zookeeper-3.7/datas dataLogDir=/usr/software/apache-zookeeper-3.7/datas/logs
-
验证Zookeeper
进入到安装的bin目录
./zkServer.sh status
关于kafka集成的zookeeper和自己安装zookeeper如何选择。
- 学习、测试阶段使用kafka集成的即可,简单方便。
生产环境,建议自己单独安装zookeeper,原因如下:
- 自带的这个默认配置是单机版的,一般来说生产环境肯定是要做集群来保证高可用,如果直接改自带的这个配置也不是不可以,但万一改错了把 Kafka 弄坏了咋整?
- 一般来说 ZK 集群和 Kafka 集群应该分离才对,但二进制包里它俩耦合在一起了,为了部署 ZK 集群连带着拷贝了 Kafka 目录有点儿多余(费点儿心思单独拷出来也不是不行……),所以索性不去动它,另起一套。
2.3 Kafka安装与配置
到Kafka官网下载:https://kafka.apache.org/downloads
-
上传下载的Kafka压缩包到服务器并解压:
tar -zxvf kafka_2.12-3.0.0
-
配置kafka_2.12-3.0.0/config中的server.properties文件:
Kafka连接Zookeeper的地址,此处使用本地启动的Zookeeper实例,连接地址是localhost:2181, 后面的
myKafka
是Kafka在Zookeeper中的根节点路径,把Kafka的元数据,保存到myKafka
节点下。如果不指定节点,kafka的节点保存到Zookeeper的根节点下。############################# Zookeeper ############################# # Zookeeper connection string (see zookeeper docs for details). # This is a comma separated host:port pairs, each corresponding to a zk # server. e.g. "127.0.0.1:3000,127.0.0.1:3001,127.0.0.1:3002". # You can also append an optional chroot string to the urls to specify the # root directory for all kafka znodes. zookeeper.connect=localhost:2181/mykafka
-
启动Zookeeper
如果是自己安装的Zookeeper,则进入到Zookeeper安装目录下的bin目录,执行如下命令
./zkServer.sh start # 查看zookeeper状态 ./zkServer.sh status
如果使用kafka集成的Zookeeper,进入到kafka安装目录下的bin目录,执行如下命令
./zookeeper-server-start.sh ../config/zookeeper.properties
-
前台启动kafka
进入到kafka安装目录下的bin目录,执行如下命令
./kafka-server-start.sh ../config/server.properties
此时Kafka是前台模式启动,关闭shell窗口后,kafka就会停止
-
后台启动kafka
./kafka-server-start.sh -daemon ../config/server.properties
-
查看Kafka的后台进程
ps -ef | grep kafka
-
停止后台运行的Kafka
./kafka-server-stop.sh
3.kafka快速体验
3.1 创建主题
创建一个名为test的主题
./kafka-topics.sh --create --partitions 1 --replication-factor 1 --topic test --bootstrap-server localhost:9092
获取test主题详细信息
./kafka-topics.sh --describe --topic test --bootstrap-server localhost:9092
列出所有可用的主题(topic)
./kafka-topics.sh --list --bootstrap-server localhost:9092
3.2 发送消息
向test主题中写入消息
./kafka-console-producer.sh --topic test --bootstrap-server localhost:9092
This is my first msg
This is my second msg
可以使用 Ctrl-C 停止生产者客户端
3.3 消费消息
打开另一个终端会话读取刚刚写入的消息
./kafka-console-consumer.sh --topic test --from-beginning --bootstrap-server localhost:9092
This is my first msg
This is my second msg
可以使用 Ctrl-C 停止消费者者客户端