Kafka起初是由LinkedIn公司采用Scala语言开发的一个多分区、多副本且基于ZooKeeper协调的分布式消息系统,现已被捐献给Apache基金会。 目前Kafka已经定位为一个分布式流式处理平台,它以高吞吐、可持久化、可水平扩展、支持流数据处理等多种特性而被广泛使用。目前越来越多的开源分布式处理系统如 Cloudera、Storm、Spark、Flink等都支持与Kafka集成。
Kafka 之所以受到越来越多的青睐,与它所“扮演”的三大角色是分不开的:
- 消息系统:Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦、冗余存储、流量削峰、缓冲、异步通信、扩展性、可恢复性等功能。与此同时,Kafka还提供了大多数消息系统难以实现的消息顺序性保障及回溯消费的功能。
- 存储系统: Kafka把消息持久化到磁盘,相比于其他基于内存存储的系统而言,有效地降低了数据丢失的风险。也正是得益于Kafka 的消息持久化功能和多副本机制,我们可以把Kafka 作为长期的数据存储系统来使用,只需要把对应的数据保留策略设置为“永久”或启用主题的日志压缩功能即可。
- 流式处理平台:Kafka 不仅为每个流行的流式处理框架提供了可靠的数据来源,还提供了一个完整的流式处理类库,比如窗口、连接、变换和聚合等各类操作。
- 基本概念
- Producer :消息生产者,就是向 kafka broker 发消息的客户端;
- Consumer :消息消费者,向 kafka broker 取消息的客户端;
- Consumer Group (CG):消费者组,由多个 consumer 组成。消费者组内每个消费者负 责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。
- Broker :一台 kafka 服务器就是一个 broker。一个集群由多个 broker 组成。一个 broker可以容纳多个 topic。
- Topic :可以理解为一个队列,生产者和消费者面向的都是一个 topic;
- Partition:为了实现扩展性,一个非常大的 topic 可以分布到多个 broker(即服务器)上,一个 topic 可以分为多个 partition,每个 partition 是一个有序的队列;
- Replica:副本,为保证集群中的某个节点发生故障时,该节点上的 partition 数据不丢失,且 kafka 仍然能够继续工作,kafka 提供了副本机制,一个 topic 的每个分区都有若干个副本, 一个 leader 和若干个 follower。
- Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是 leader。
- follower:每个分区多个副本中的“从”,实时从 leader 中同步数据,保持和 leader 数据的同步。leader 发生故障时,某个 follower 会成为新的 follower。
- 安装与配置
2.1搭建kafka集群机器配置
ip | 192.168.133.128 | 192.168.133.129 | 192.168.133.130 |
zookeeper | server.1=192.168.133.128:2888:3888 server.2=192.168.133.129:2888:3888 server.3=192.168.133.130:2888:3888 | server.1=192.168.133.128:2888:3888 server.2=192.168.133.129:2888:3888 server.3=192.168.133.130:2888:3888 | server.1=192.168.133.128:2888:3888 server.2=192.168.133.129:2888:3888 server.3=192.168.133.130:2888:3888 |
kafka | broker.id=1 | broker.id=2 | broker.id=3 |
2.2下载
wget http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.12-2.0.0.tgz
2.3解压
tar -xzf kafka_2.12-2.0.0.tgz
2.4创建logs文件夹
mkdir logs
2.5修改配置文件
vim server.properties
2.6输入以下内容
#broker的全局唯一编号,不能重复
broker.id=1
#删除topic功能使用
delete.topic.enable=true
#处理网络请求的线程数量
num.network.threads=3
#用来处理磁盘IO的现成数量
num.io.threads=8
#发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
#接收套接字的缓冲区大小
socket.receive.buffer.bytes=102400
#请求套接字的缓冲区大小
socket.request.max.bytes=104857600
#kafka运行日志存放的路径
log.dirs=/usr/local/src/kafka/kafka_2.11/logs
#topic在当前broker上的分区个数
num.partitions=1
#用来恢复和清理data下数据的线程数量
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=1
transaction.state.log.replication.factor=1
transaction.state.log.min.isr=1
#segment文件保留的最长时间,超时将被删除
log.retention.hours=168
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
#kafka所需的zookeeper集群地址以及配置
zookeeper.connect=192.168.133.128:2181,192.168.133.129:2181,192.168.133.130:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0
# broker对外提供的服务入口地址
listeners=PLAINTEXT://192.168.133.128:9092
2.7配置环境变量
vim /etc/profile
#配置kafka环境
export KAFKA_HOME=/usr/local/src/kafka/kafka_2.11
export PATH=$PATH:$KAFKA_HOME/bin
2.8分别在其他服务器上129,130 分别配置server.properties,注意配置文件的broker.id = 2、 broker.id = 3, broker.id 不允许重复
3.启动服务、创建生产者和消费者
ZooKeeper是安装Kafka集群的必要组件,Kafka通过ZooKeeper 来实施对元数据信息的管理,包括集群、broker、主题、分区等内容。
ZooKeeper是一个开源的分布式协调服务,是Google Chubby的一个开源实现。分布式应用程序可以基于ZooKeeper实现诸如数据发布/订阅、负载均衡、命名服务、分布式协调/通知、集群管理、Master选举、配置维护等功能。在ZooKeeper中共有3个角色:leader 、follower和 observer,同一时刻ZooKeeper集群中只会有一个leader,其他的都是follower 和 observer。observer不参与投票,默认情况下ZooKeeper 中只有leader和 follower 两个角色。更多相关知识可以查阅
3.1首先启动zookeeper
./zkServer.sh start
3.2 查看zookeeper的启动状态和角色
./zkServer.sh status
3.3启动kafka服务
bin/kafka-server-start.sh -daemon config/server.properties
或者
bin/kafka-server-start.server config/server.properties &
3.4查看服务是否启动成功
输入命令:jps
打印:
21892 Jps
14520 QuorumPeerMain --zookeeper服务
21498 Kafka --kafka服务(仅启动服务不行,还需要进行生产者和消费者进行发送消息验证)
3.5获取已创建的所有主题列表
获取集群中的主题列表
bin/kafka-topics.sh --list --zookeeper 192.168.133.130:2181
3.6启动消费者
启动消费者,订阅主题-six
bin/kafka-console-consumer.sh --bootstrap-server 192.168.133.128:9092 --topic six
3.7启动生产者
启动生产者,发消息到-six主题
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic six
有问题欢迎私信我。