kafka与zookeeper
kafka简介
kafka (官网地址:http://kafka.apache.org)是一款分布式消息发布和订阅的系统,具有高性能和高吞吐率。
下载地址:http://kafka.apache.org/downloads
- 消息的发布(publish)称作producer,消息的订阅(subscribe)称作consumer,中间的存储阵列称作broker。
- 多个broker协同合作,producer、consumer和broker三者之间通过zookeeper来协调请求和转发。
- producer产生和推送(push)数据到broker,consumer从broker拉取(pull)数据并进行处理。
- broker端不维护数据的消费状态,提升了性能。
- 直接使用磁盘进行存储,线性读写,速度快:避免了数据在JVM内存和系统内存之间的复制,减少耗性能的创建对象和垃圾回收。
- Kafka使用scala编写,可以运行在JVM上。
Kafka和其他主流分布式消息系统的对比
- 异步处理, 把非关键流程异步化,提高系统的响应时间和健壮性
- 应用解耦,通过消息队列
- 流量削峰
zookeeper简介
ZooKeeper是一种为分布式应用所设计的高可用、高性能且一致的开源协调服务,它提供了一项基本服务:分布式锁服务。由于ZooKeeper的开源特性,后来我们的开发者在分布式锁的基础上,摸索了出了其他的使用方法:配置维护、组服务、分布式消息队列、分布式通知/协调等。
官网:https://zookeeper.apache.org/
下载地址:http://mirrors.tuna.tsinghua.edu.cn/apache/zookeeper/
zookeeper应用场景:
- 服务注册&服务发现
配置中心
- 分布式锁
Zookeeper是强一致的
多个客户端同时在Zookeeper上创建相同znode,只有一个创建成功
其它博文:http://www.cnblogs.com/sunddenly/p/4033574.html
kafka和zookeeper的单机部署
1、配置环境变量
export ZOOKEEPER_HOME=/root/zookeeper-3.4.11
export JAVA_HOME=/usr/local/java/jre1.8.0_161
export PATH=$JAVA_HOME/bin:$ZOOKEEPER_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$ZOOKEEPER_HOME/lib:$CLASSPATH
2、解压zookeeper
tar -xvf zookeeper-3.4.11.tar.gz
3、配置zookeeper
cp /root/zookeeper-3.4.11/conf/zoo_sample.cfg /root/zookeeper-3.4.11/conf/zoo.cfg
vim zoo.cfg
dataDir=/root/zookeeper-3.4.11/zkdata
dataLogDir=/root/zookeeper-3.4.11/zkdatalog
4、启动zookeeper
sh /root/zookeeper-3.4.11/bin/zkServer.sh start
5、解压kafka
tar -xvf kafka_2.11-1.0.0.tgz
6、修改配置kafka
log.dirs=/root/kafka_2.11-1.0.0/logs
7、启动kafka
./kafka-server-start.sh ../config/server.properties &
Zookeeper集群搭建
1、部署环境
操作系统:centos6.8
3台服务器:10.10.83.162、10.10.83.163、10.10.83.229
zookeeper版本:3.4.9
部署要求:Zookeeper集群的工作是超过半数才能对外提供服务,Linux服务器一台、三台、五台、(2*n+1)
2、java安装
yum list java*
yum -y install java-1.8.0-openjdk*
3、Zookeeper下载解压
tar -zxvf zookeeper-3.4.9.tar.gz
4、修改配置文件
1)进入conf目录
cp zoo_sample.cfg zoo.cfg
配置内容
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/software/zookeeper-3.4.9/zkdata
dataLogDir=/home/software/zookeeper-3.4.9/zkdata
# the port at which the clients will connect
clientPort=12181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
server.1=10.10.83.162:12888:13888
server.2=10.10.83.163:12888:13888
server.3=10.10.83.229:12888:13888
配置项说明:
- tickTime:心跳时间,为了确保连接存在的,以毫秒为单位,最小超时时间为两个心跳时间
- initLimit:多少个心跳时间内,允许其他server连接并初始化数据,如果ZooKeeper管理的数据较大,则应相应增大这个值
- clientPort:这个端口就是客户端连接 Zookeeper 服务器的端口,Zookeeper 会监听这个端口,接受客户端的访问请求
- dataDir:内存数据库快照存放地址,如果没有指定事务日志存放地址(dataLogDir),默认也是存放在这个路径下,建议两个地址分开存放到不同的设备上
- dataLogDir:用于单独设置transaction log的目录,transaction log分离可以避免和普通log还有快照的竞争
- syncLimit:这个配置项标识 Leader 与Follower 之间发送消息,请求和应答时间长度,最长不能超过多少个 tickTime 的时间长度,总的时间长度就是5*2000=10秒
- 从3.4.0开始,zookeeper提供了自动清理snapshot和事务日志的功能,通过配置 autopurge.snapRetainCount 和 autopurge.purgeInterval 这两个参数能够实现定时清理了。这两个参数都是在zoo.cfg中配置的:
- autopurge.purgeInterval 这个参数指定了清理频率,单位是小时,需要填写一个1或更大的整数,默认是0,表示不开启自己清理功能。
- autopurge.snapRetainCount 这个参数和上面的参数搭配使用,这个参数指定了需要保留的文件数目。默认是保留3个
- server.A=B:C:D(A是一个数字,表示这个是第几号服务器,B是这个服务器的ip地址,C第一个端口用来集群成员的信息交换,表示的是这个服务器与集群中的Leader服务器交换信息的端口,D是在leader挂掉时专门用来进行选举leader所用)
- maxClientCnxns:一个客户端能够连接到同一个服务器上的最大连接数,根据IP来区分。如果设置为0,表示没有任何限制。设置该值一方面是为了防止DoS攻击
2)创建myid文件
在每台服务器创建自己的myid文件
# server1 10.10.83.162
echo "1" > /home/software/zookeeper-3.4.9/zkdata/myid
# server2 10.10.83.163
echo "2" > /home/software/zookeeper-3.4.9/zkdata/myid
# server3 10.10.83.229
echo "3" > /home/software/zookeeper-3.4.9/zkdata/myid
myid文件和server.myid 在快照目录下存放的标识本台服务器的文件,他是整个zk集群用来发现彼此的一个重要标识。
3)日志输出配置
- 修改./bin/zkEnv.sh 文件
if [ "x${ZOO_LOG_DIR}" = "x" ]
then
ZOO_LOG_DIR="/home/software/zookeeper-3.4.9/logs"
fi if [ "x${ZOO_LOG4J_PROP}" = "x" ]
then
ZOO_LOG4J_PROP="INFO,ROLLINGFILE"
fi
- 修改./conf/log4j.properties文件
zookeeper.root.logger=INFO, ROLLINGFILE log4j.appender.CONSOLE=org.apache.log4j.DailyRollingFileAppender log4j.appender.ROLLINGFILE.MaxFileSize=100MB
5、启动服务并查看
- 启动服务
#启动服务(3台都需要操作)
./bin/zkServer.sh start
- 检查服务状态
./bin/zkServer.sh status
zk集群一般只有一个leader,多个follower,主一般是相应客户端的读写请求,而从主同步数据,当主挂掉之后就会从follower里投票选举一个leader出来。
Kafka集群搭建
http://mirror.bit.edu.cn/apache/kafka
1、部署环境
centos 6.8
3台服务器:10.10.83.162、10.10.83.163、10.10.83.229(linux一台或多台,大于等于2)
kafka版本:2.11-0.11.0.1
已经搭建好的zookeeper集群
2、安装
官方文档:http://kafka.apache.org/quickstart
tar -xzf kafka_2.11-0.11.0.1.tgz
cd kafka_2.11-0.11.0.1
3、配置
进入到config目录,修改server.properties文件
broker.id=1 # 集群中每台主机唯一标识
listeners=PLAINTEXT://10.10.83.162:9092
advertised.host.name=10.10.83.162
log.dirs=/home/software/kafka_2.11-0.11.0.1/kafkalogs
zookeeper.connect=10.10.83.162:12181,10.10.83.163:12181,10.10.83.229:12181
配置项说明:
- broker.id: 当前机器在集群中的唯一标识,和zookeeper的myid性质一样
- listeners:绑定服务监听的地址和端口
- advertised.listeners:broker对producers和consumers服务的地址和端口,如果没有配置,使用listeners的配置
- num.network.threads:处理网络请求的线程数量,也就是接收消息的线程数,接收线程会将接收到的消息放到内存中,然后再从内存中写入磁盘
- num.io.threads:用来处理磁盘IO的线程数量,消息从内存中写入磁盘是时候使用的线程数量
- socket.send.buffer.bytes:发送套接字的缓冲区大小
- socket.receive.buffer.bytes:接受套接字的缓冲区大小
- socket.request.max.bytes:请求套接字的缓冲区大小
- log.dirs:存放日志和消息的目录,可以是用逗号分开的目录
- num.partitions:每个topic默认partitions的数量,数量较大表示消费者可以有更大的并行度
- num.recovery.threads.per.data.dir:用来设置恢复和清理data下数据的线程数量
- log.retention.hours:日志的过期时间,超过后被删除,单位小时
- log.segment.bytes:一个日志文件最大大小,超过会新建一个文件
- log.retention.check.interval.ms:根据过期策略检查过期文件的时间间隔,单位毫秒
- log.flush.interval.messages:每当producer写入消息的条数达到阈值,刷数据到磁盘
- log.flush.interval.ms:每间隔阈值时间,刷数据到磁盘,单位毫秒
- zookeeper.connect:broker需要使用zookeeper保存meta数据
- zookeeper.connection.timeout.ms:zookeeper链接超时时间
- delete.topic.enable:删除topic
- advertised.host.name:外网访问配置
4、启动Kafka集群
1)启动服务
cd ./bin
./kafka-server-start.sh -daemon ../config/server.properties
2)检查服务是否启动
jps -lm
5、测试
1)创建Topic,名称是nginx_log
./kafka-topics.sh --create --zookeeper 10.10.83.162:12181 --replication-factor 1 --partitions 1 --topic nginx_log
- --replication-factor 2 #复制两份
- --partitions 1 #创建1个分区
- --topic #主题为nginx_log
2)创建生产者
./kafka-console-producer.sh --broker-list 10.10.83.162:9092 --topic nginx_log
3)创建消费者
./kafka-console-consumer.sh --bootstrap-server 10.10.83.162:9092 --topic nginx_log --from-beginning
测试(在发布者那里发布消息看看订阅者那里是否能正常收到~)
4)查看topic
./kafka-topics.sh --list --zookeeper 10.10.83.162:12181
5)查看topic状态
./kafka-topics.sh --describe --zookeeper 10.10.83.162:12181 --topic nginx_log
6)删除topic
./kafka-topics.sh --zookeeper 10.10.83.162:12181 --delete --topic nginx_log
备注:设置server.properties文件中delete.topic.enable=true
6、日志说明
默认kafka的日志是保存在./logs目录下的
- server.log #kafka的运行日志
- state-change.log #kafka他是用zookeeper来保存状态,所以他可能会进行切换,切换的日志就保存在这里
- controller.log #kafka选择一个节点作为“controller”,当发现有节点down掉的时候它负责在分区的所有节点中选择新的leader,这使得Kafka可以批量的高效的管理所有分区节点的主从关系。如果controller down掉了,活着的节点中的一个会备切换为新的controller
kafka与zookeeper的更多相关文章
- kafka及zookeeper安装
kafka_2.9.2-0.8.1.tgzzookeeper-3.4.8.tar.gz 安装 zookeeper1 export PATH=$PATH:/usr/local/zookeeper/bin ...
- java企业架构 spring mvc +mybatis + KafKa+Flume+Zookeeper
声明:该框架面向企业,是大型互联网分布式企业架构,后期会介绍linux上部署高可用集群项目. 项目基础功能截图(自提供了最小部分) 平台简介 Jeesz是一个分布式的框架,提供 ...
- kafka之zookeeper 节点
1.zookeeper 节点 kafka 在 zookeeper 中的存储结构如下图所示:
- 脚本检测Kafka和Zookeeper
Java测试环境中Kafka最近总是自动停止,所有写了一个简单的脚本来监听Kafka和Zookeeper,其中Kafka监听端口为9092,Zookeeper监听端口为2181,脚本如下: #!/bi ...
- kubernetes(k8s) helm安装kafka、zookeeper
通过helm在k8s上部署kafka.zookeeper 通过helm方法安装 k8s上安装kafka,可以使用helm,将kafka作为一个应用安装.当然这首先要你的k8s支持使用helm安装.he ...
- centOS7安装kafka和zookeeper
wget http://mirrors.hust.edu.cn/apache/kafka/2.0.0/kafka_2.11-2.0.0.tgz tar zxvf kafka_2.-.tgz cd ka ...
- kafka在zookeeper上的节点信息和查看方式
kafka在Zookeeper上的节点如下图: 该图片盗自大牛的博客http://blog.csdn.net/lizhitao/article/details/23744675 服务端开启的情况下,进 ...
- zookeeper集群环境搭建(使用kafka的zookeeper搭建zk集群)
---恢复内容开始--- 使用kafka的zookeeper来搞集群的话和单纯用zk的其实差不了多少. 0.说在前头,搭建kafka集群之前请把每个服务器的jdk搞起来. 1.安装kafka wget ...
- Kafka学习之路 (五)Kafka在zookeeper中的存储
一.Kafka在zookeeper中存储结构图 二.分析 2.1 topic注册信息 /brokers/topics/[topic] : 存储某个topic的partitions所有分配信息 [zk: ...
随机推荐
- codeforces616B
Dinner with Emma CodeForces - 616B Jack decides to invite Emma out for a dinner. Jack is a modest st ...
- Nginx geoip模块
需要编译进 --with-http_geoip_module 首先要安装maxMind里的geoip的c开发库 https://dev.maxmind.com/geoip/legacy/downloa ...
- Luogu4389 付公主的背包(生成函数+多项式exp)
显然构造出生成函数,对体积v的物品,生成函数为1+xv+x2v+……=1/(1-xv).将所有生成函数乘起来得到的多项式即为答案,设为F(x),即F(x)=1/∏(1-xvi).但这个多项式的项数是Σ ...
- CH0802 占卜DIY
模拟 没怎么看题..直接deque模拟水过了.. 但是后来回过头看了下题意..如果再次拿到正面朝上的牌,应该是废操作..可能是数据太水了... #include <bits/stdc++.h&g ...
- 【AGC018F】Two Trees 构造 黑白染色
题目描述 有两棵有根树,顶点的编号都是\(1\)~\(n\). 你要给每个点一个权值\(a_i\),使得对于两棵树的所有顶点\(x\),满足\(|x\)的子树的权值和\(|=1\) \(n\leq 1 ...
- 我的代码库-Java8实现FTP与SFTP文件上传下载
有网上的代码,也有自己的理解,代码备份 一般连接windows服务器使用FTP,连接linux服务器使用SFTP.linux都是通过SFTP上传文件,不需要额外安装,非要使用FTP的话,还得安装FTP ...
- Python 面试题_未完
基础部分 1. 为什么学习Python 家里有在这个IT圈子里面,也想让我接触这个圈子,然后给我建议学的Python, 然后自己通过百度和向有学过Python的同学了解了Python,Python这门 ...
- 爬虫_猫眼电影top100(正则表达式)
代码查看码云
- 【cf849D】Rooter's Song(思维)
D. Rooter's Song 题意 x轴.y轴上有n个人,第i个人\(g_i==1\)则坐标为\((p_i,0)\)否则\((0,p_i)\),\(t_i\)秒后垂直所在坐标轴出发,到达边界x=w ...
- 【BZOJ2940】条纹(博弈论)
[BZOJ2940]条纹(博弈论) 题面 BZOJ 神TM权限题. 题解 我们把题目看成取石子的话,题目就变成了这样: 有一堆\(m\)个石头,每次可以取走\(c,z,n\)个,每次取完之后可以把当前 ...