一、Kafka
1.1 Kafka是最初由Linkedin公司开发,Linkedin于2010年贡献给了Apache基金会并成为顶级开源项目,也是一个开源【分布式流处理平台】,由Scala和Java编写,(也当做MQ系统,但不是纯粹的消息系统)
核心:一种高吞吐量的分布式流处理平台,它可以处理消费者在网站中的所有动作流数据。 比如 网页浏览,搜索和其他用户的行为等,应用于大数据实时处理领域
•官网:http://kafka.apache.org/
•快速开始:http://kafka.apache.org/quickstart
二、核心概念
2.1 Broker
Kafka的服务端程序,可以认为一个mq节点就是一个broker
broker存储topic的数据
2.2 Producer生产者
创建消息Message,然后发布到MQ中
该角色将消息发布到Kafka的topic中
2.3 Consumer消费者:
消费队列里面的消息
2.4 ConsumerGroup消费者组
同个topic, 广播发送给不同的group,一个group中只有一个consumer可以消费此消息
2.5 Topic
每条发布到Kafka集群的消息都有一个类别,这个类别被称为Topic,主题的意思
2.6 Partition分区
kafka数据存储的基本单元,topic中的数据分割为一个或多个partition,每个topic至少有一个partition,是有序的
一个Topic的多个partitions, 被分布在kafka集群中的多个server上
消费者数量 <=小于或者等于Partition数量
2.7 Replication 副本(备胎)
同个Partition会有多个副本replication ,多个副本的数据是一样的,当其他broker挂掉后,系统可以主动用副本提供服务
默认每个topic的副本都是1(默认是没有副本,节省资源),也可以在创建topic的时候指定
如果当前kafka集群只有3个broker节点,则replication-factor最大就是3了,如果创建副本为4,则会报错
2.8 ReplicationLeader、ReplicationFollower
Partition有多个副本,但只有一个replicationLeader负责该Partition和生产者消费者交互
ReplicationFollower只是做一个备份,从replicationLeader进行同步
2.9 ReplicationManager
负责Broker所有分区副本信息,Replication 副本状态切换
offset
每个consumer实例需要为他消费的partition维护一个记录自己消费到哪里的偏移offset
kafka把offset保存在消费端的消费者组里
特点总结:
多订阅者
一个topic可以有一个或者多个订阅者
每个订阅者都要有一个partition,所以订阅者数量要少于等于partition数量
高吞吐量、低延迟: 每秒可以处理几十万条消息
高并发:几千个客户端同时读写
容错性:多副本、多分区,允许集群中节点失败,如果副本数据量为n,则可以n-1个节点失败
扩展性强:支持热扩展
基于消费者组可以实现:
基于队列的模型:所有消费者都在同一消费者组里,每条消息只会被一个消费者处理
基于发布订阅模型:消费者属于不同的消费者组,假如每个消费者都有自己的消费者组,这样kafka消息就能广播到所有消费者实例上
三、快速部署
需要的软件和环境版本说明
kafka-xx-yy
xx 是scala版本,yy是kafka版本(scala是基于jdk开发,需要安装jdk环境)
下载地址:http://kafka.apache.org/downloads
zookeeper
Apache 软件基金会的一个软件项目,它为大型分布式计算提供开源的分布式配置服务、同步服务和命名注册
下载地址:https://zookeeper.apache.org/releases.html
jdk1.8
配置全局环境变量
解压:tar -zxvf jdk-8u181-linux-x64.tar.gz
vim /etc/profile
配置
JAVA_HOME=/usr/local/software/jdk1.8
CLASSPATH=$JAVA_HOME/lib/
PATH=$PATH:$JAVA_HOME/bin
export PATH JAVA_HOME CLASSPATH
环境变量立刻生效
source /etc/profile
查看安装情况 java -version
zookeeper
解压缩:tar -zxvf apache-zookeeper-3.7.0-bin.tar.gz
重命名 mv apache-zookeeper-3.7.0-bin zookeeper
进入配置:cd zookeeper/conf/
cp zoo_sample.cfg zoo.cfg (具体配置项更改,可根据实际业务情况进行配置)
进入bin:cd zookeeper/bin/
启动 ./zkServer.sh start
kafka
解压缩: tar -zxvf kafka_2.13-2.8.0.tgz
重命名: mv kafka_2.13-2.8.0 kafka
进入config目录下 server.properties
#标识broker编号,集群中有多个broker,则每个broker的编号需要设置不同
broker.id=0
#修改下面两个配置 ( listeners 配置的ip和advertised.listeners相同时启动kafka会报错)
listeners(内网Ip)
advertised.listeners(公网ip)
#修改zk地址,默认地址
zookeeper.connection=localhost:2181
启动: cd kafka/bin
./kafka-server-start.sh -daemon ../config/server.properties &
#停止
kafka-server-stop.sh
创建topic
./kafka-topics.sh --create --zookeeper xx.xx.xx.240:2181 --replication-factor 1 --partitions 1 --topic wnn-topic
查看topic
./kafka-topics.sh --list --zookeeper xxxx.xxxx.240:2181