Kafka入门
Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,
Kafka是什么
- Apache Kafka是一个开源消息系统,由Scala写成。是由Apache软件基金会开发的一个开源消息系统项目。
- Kafka最初是由LinkedIn开发,并于2011年初开源。2012年10月从Apache Incubator毕业。该项目的目标是为处理实时数据提供一个统一、高通量、低等待的平台。
- Kafka是一个分布式消息队列:生产者、消费者的功能。它提供了类似于JMS的特性,但是在设计实现上完全不同,此外它并不是JMS规范的实现。
- Kafka对消息保存时根据Topic进行归类,发送消息者称为Producer,消息接受者称为Consumer,此外kafka集群有多个kafka实例组成,每个实例(server)成为broker。
- 无论是kafka集群,还是producer和consumer都依赖于zookeeper集群保存一些meta信息,来保证系统可用性
Kafka核心组件
- Topic :消息根据Topic进行归类
- Producer:发送消息者
- Consumer:消息接受者
- broker:每个kafka实例(server)
- Zookeeper:依赖集群保存meta信息。
Kafka集群搭建
前提:已成功搭建zookeeper集群
概览
Kafka最终部署在主机名为mini1、mini2、mini3的三台机器上,zookeeper也同时部署在这三天机器。配置三台主机的/etc/hosts文件,使IP和主机名对应。本次部署的Kafka版本为 kafka_2.11-0.8.2.2
-
集群部署的基础环境准备
- root用户下防火墙
chkconfig iptables off && setenforce 0
- 创建mini用户
groupadd mini && useradd mini && usermod -a -G mini mini
- 创建工作目录并赋权
mkdir /export mkdir /export/servers chmod 755 -R /export
- 切换到mini用户下
-
下载安装包
地址 http://kafka.apache.org/downloads.html 在官网找到对应的kafka_2.11-0.8.2.2.tgz 压缩包下载。
- 将压缩包上传到mini1机器并解压安装包
tar -zxvf /export/software/kafka_2.11-0.8.2.2.tgz -C /export/servers/
cd /export/servers/
mv kafka_2.11-0.8.2.2 kafka
- 修改配置文件
# 全局唯一编号,不能重复
broker.id=1
############################# Socket Server Settings #############################
# 用来监听的端口,producer或consumer将在此端口上建立连接
port=9092
# 处理网络请求的线程数量
num.network.threads=3
# 用来处理磁盘IO的线程数量
num.io.threads=8
# 发送套接字的缓冲区大小
socket.send.buffer.bytes=102400
# 接受套接字的缓冲区大小
socket.receive.buffer.bytes=102400
# 请求套接字的缓冲区大小
socket.request.max.bytes=104857600
############################# Log Basics #############################
# kafka运行日志保存的路径
log.dirs=/export/servers/logs/kafka
# topic在当前broker上的分片个数
num.partitions=2
# 用来恢复和清理data下的数据的线程数量
num.recovery.threads.per.data.dir=1
############################# Log Flush Policy #############################
# segment 文件保留的最长时间,超时将被删除
log.retention.hours=168
# 滚动生成新的segment文件的最大时间
log.roll.hours=168
# 日志文件中每个segment的大小,默认为1G
log.segment.bytes=1073741824
# to the retention policies
# 周期性检查文件大小的时间
log.retention.check.interval.ms=300000
# 日志清理是否打开
log.cleaner.enable=true
############################# Zookeeper #############################
zookeeper.connect=mini1:2181,mini2:2181,mini3:2181
# zookeeper链接的超时时间
zookeeper.connection.timeout.ms=6000
# partiion buffer中,消息的条数达到阈值,将触发flush到磁盘
log.flush.interval.messages=10000
# 消息buffer的时间,达到阈值,将触发flush到磁盘
log.flush.interval.ms=3000
# 删除topic需要server.properties中设置delete.topic.enable=true否则只是标记删除
delete.topic.enable=true
# 此处的host.name为本机的IP,如果不改则客户端会抛出:Producer connection to localhost:9092 unsuccessful 错误!
host.name=mini2
# host 对应的IP
advertised.host.name=192.168.175.139
- 分发安装包到其他机器
scp -r /export/servers/kafka mini2:/export/servers
scp -r /export/servers/kafka mini3:/export/servers
- 再次修改配置文件
依次修改各服务器上配置文件的的broker.id,分别是0,1,2不得重复,同时修改配置文件的host.name 与 advertised.host.name,并在各个机器上创建上述配置文件中设置的kafka运行时的日志所在目录 (log.dirs的值)。
- 启动集群
- 先启动zookeeper集群
- 依次在各节点上启动kafka
/export/servers/kafka/bin/kafka-server-start.sh /export/servers/kafka/config/server.properties