Kafka概述
Kafka是一个分布式系统,由通过高性能TCP网络协议进行通信的服务器和客户端组成。它可以部署在内部以及云环境中的裸机硬件,虚拟机和容器上。
1)Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
2)Kafka最初是由LinkedIn公司开发,并于2011年初开源。2012年10月从 Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
3)Kafka 是一个分布式消息队列。Kafka 对消息保存时根据 Topic 进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)称为broker。
4)无论是 kafka 集群,还是 consumer 都依赖于 zookeeper 集群保存一些 meta 信息,来保证系统可用性。
kafka架构图
kafka中的概念
1)Producer :生产者是那些向Kafka发布(写)事件的客户端应用程序。
2)Consumer :消费者是那些订阅(读和处理)这些事件的客户端应用程序。
3)Topic :主题类似于文件系统中的文件夹,事件是该文件夹中的文件。消息一般通过topic区分。
4) Consumer Group (CG):用户组,kafka通过用户组来区分消费者。一个topic中的消息会发送给所有用户组。但是只会把消息发给该用户组中的一个消费者。
5)Broker :一台 kafka服务器就是一个 broker。一个集群由多个broker组成。一个 broker 可以容纳多个topic。
6)Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。partition中的每条消息都会被分配一个有序的id(offset)。kafka只保证按一个partition中的顺序将消息发consumer,不保证一个topic的整体(多个partition间)的顺序;
7)Offset:kafka 的存储文件都是按照 offset.kafka 来命名,用 offset 做名字的好处是方便查找。例如你想找位于 2049 的位置,只要找到 2048.kafka 的文件即可。当然 the first offset 就是00000000000.kafka
Zookeeper安装
由于kafka需要Zookeeper服务,我们需要先安装Zookeeper
Zookeeper简介
ZooKeeper 是一个开源的分布式框架,提供了协调分布式应用的基本服务。它向外部应用暴露一组通用服务——分布式同步(Distributed Synchronization)、命名服务(Naming Service)、集群维护(Group Maintenance)等,简化分布式应用协调及其管理的难度。
它是Google的Chubby一个开源的实现。它本身可以搭建成一个集群,这个zk集群用来对应用程序集群进行管理,监视应用程序集群中各个节点的状态,并根据应用程序集群中各个节点提交的反馈信息决定下一步的合理操作
Zookeeper安装
下载zookeeper压缩包:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.10/zookeeper-3.4.10.tar.gz
上传至服务器解压
部署3个节点的Zookeeper伪分布式集群
- 首先,建立一个集群安装的目录,就叫 zookeeper。其次,在这个目录的下面解压三份ZooKeeper,形成3个节点,每一个目录中的ZooKeeper就代表一个节点。
这样就形成了如下的安装目录结构:
- 为每个节点建立data目录、logs目录和myid文件
myid 文件的内容是节点在集群中的编号,zookeeper1 节点的编号就写成 1,后边的zookeeper2的编号是2,zookeeper3的编号就是3。 - 为每个节点创建配置文件
在zookeeper1下将配置文件zoo_sample.cfg 改名为zoo.cfg
配置文件zoo.cfg的内容如下:
dataDir=/usr/zookeeper/zookeeper1/data
dataLogDir=/usr/zookeeper/zookeeper1/logs
clientPort=2181
server.1=127.0.0.1:8880:7770
server.2=127.0.0.1:8881:7771
server.3=127.0.0.1:8882:7772
用同样的方法,在 zookeeper2 和 zookeeper3 的相应位置创建 zoo.cfg,文件内容复制zookeeper1的zoo.cfg。只不过需要改动clientport、dataDir、dataLogDir三个配置项,zookeeper2的clientport改为2182,zookeeper3的clientport改为2183,而 dataDir
和dataLogDir都修改为相应的目录,就好了。
- 启动zk集群
进入zookeeper集群的第一个节点zookeeper0的bin目录下,启动服务
bin/zkServer.sh start
然后,按照同样的方法,依次启动zookeeper1和zookeeper2的服务。
Zookeeper服务命令
#启动ZK服务:
bin/zkServer.sh start
#查看ZK服务状态:
bin/zkServer.sh status
#停止ZK服务:
bin/zkServer.sh stop
#重启ZK服务:
bin/zkServer.sh restart
#连接服务器:
zkCli.sh -server 127.0.0.1:2181
kafka安装
首先需要在官网下载kafka
官网地址:http://kafka.apache.org/downloads
下载好后上传至centos7中
解压
tar -zxvf kafka_2.12-2.1.0.tgz
修改配置文件
cd到config目录下,编辑server.properties
broker.id=0
#此处填写你的服务器ip
listeners=PLAINTEXT://192.168.130.128:9092
#选择你的logs存放目录
log.dirs=/usr/kafka2.12/kafka-logs
delete.topic.enable=true
#zookeeper集群信息
zookeeper.connect=192.168.130.128:2181,192.168.130.128:2182,192.168.130.128:2183
启动服务
bin/kafka-server-start.sh config/server.properties
现在创建一个副本为3的新 topic
bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic topic_test
查看集群中的topic信息
bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic topic_test
查看kafka topic列表
bin/kafka-topics.sh --zookeeper localhost:2181 --list
查看已经消费的topic数据
bin/kafka-console-consumer.sh --bootstrap-server 192.168.130.128:9092 --topic topic_test --from-beginning
查看kafka consumer-group列表
bin/kafka-consumer-groups.sh --bootstrap-server 192.168.130.128:9092 --list
删除topic_test
bin/kafka-topics.sh --delete --zookeeper 127.0.0.1:2181 --topic topic_test
修改分区数量
bin/kafka-topics.sh --zookeeper 192.168.130.128:2181 --alter --topic topic_test --partitions 4