1.zookeeper
zookeeper作为大数据集群的最基础的服务组件,许多集群服务都需要zookeeper集群的稳定并且高效的运行。那么对于zookeeper集群的基本参数理解就是不可避免的了。可以用这些参数来进行集群的管理和调优。
如果集群有问题,那么根据打印日志信息 再加上对于集群配置参数的理解 就会很方便的进行排查问题,检查集群的性能瓶颈
# The number of milliseconds of each tick
tickTime=5000
# 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=/data/hadoop3/data/zookeeper-3.4.10/zkData
# the port at which the clients will connect
clientPort=2181
# 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
#######################cluster##########################
# 这时配置集群服务的端口号 第一个是心跳端口 第二个是选举端口
server.1=hadoop01-dev:2888:3888
server.2=hadoop02-dev:2888:3888
server.3=hadoop03-dev:2888:3888
参数解释:
tickTime:
默认为2000
意思是滴答滴答得意思。是作为心跳得间隔时间。引用官方文档得话是:
单个刻度的长度,这是ZooKeeper使用的基本时间单位,以毫秒为单位。它用于调节心跳和超时。例如,最小会话超时将是两个刻度。
这个参数对于zookeeper是一个最基本得时间刻度 其他的一些时间配置默认值都是这个刻度时间得整数倍 !!!
在官网上的一些依赖tickTime的默认配置摘抄:(也是平时会用到的)
minSessionTimeout:
3.3.0中的新增功能:服务器允许客户端进行协商的最小会话超时(以毫秒为单位)。默认为tickTime的2倍。
maxSessionTimeout:
3.3.0中的新增功能:服务器允许客户端协商的最大会话超时(以毫秒为单位)。默认为tickTime的20倍。
dataDir:
存储数据得地方 也就是快照数据会在这里进行存储
clientPort:
端口号不需多说
initLimit:
集群参数 限制初次启动(初始化)的follwer与leader进行通信时能容忍的最多心跳数量(也就是 tickTime的多少倍)
注意:
如果你的快照数据量较大的话 那么在初始化的时候 读取快照的时间就会相对长,如果超过规定时间那么就会出现错误 此时需要调整这个参数
syncLimit:
follwer与leader进行数据同步时能容忍的最多心跳数量(也就是 tickTime的多少倍)
如果同步超过这个时间,就会丢弃这个follwer !!!
网络状况不是很稳定 可以适当调整这个参数
2.flume
flume作为大数据采集组件,功能也是非常的强大 数据源以及下沉目的地都是很多的,还支持自定义的source和sink 。方便我们的使用
我使用的flume只涉及一小部分
使用场景是用flume-ng-sqlsource 到file channel 到kafkasink
flume-ng-sqlsource
可以直接下载选择自己的版本
可将jar包下载下来自行查看源码 也可自己根据自己的做增量业务进行修改再使用
这个的作用就是返回查询的最后一行的第一个字段作为一个状态文件存储
file channel
#channels类型
empi.channels.c1.type = file
#检查点目录
empi.channels.c1.checkpointDir = /data/hadoop3/data/flume/data/filechannel/checkpoint/empi-transaction-log/
#存储数据的目录
empi.channels.c1.dataDirs = /data/hadoop3/data/flume/data/filechannel/data/empi-transaction-log/
#存储数据文件的最大数量 字节为单位
empi.channels.c1.maxFileSize = 2146435071
#存储event的容量限制
empi.channels.c1.capacity = 1000000
#等待put操作的最长时间 默认值为3 单位秒
empi.channels.c1.keep-alive = 3
keep-alive:
这个参数对于数据服务的性能和准确性影响很大。因为如果数据量大或者网络不是很稳定的话 就会造成这一批次数据同步失败 可能会有数据缺失 根据自身情况适当调整
kafkasink
#sink类型
empi.sinks.k1.type = org.apache.flume.sink.kafka.KafkaSink
#topic名称
empi.sinks.k1.topic = topic_name
#连接端口
empi.sinks.k1.kafka.bootstrap.servers = hadoop01-dev:9092,hadoop02-dev:9092,hadoop03-dev:9092
#ack配置
#0为发送后不管数据认为发送成功
#1为发送后只要kafka副本leader接收成功就会认为发送成功
#-1为kafka副本所有的都接收成功那么就会认为发送成功
empi.sinks.k1.producer.acks = -1
#最小多大进行发送一次 单位字节
empi.sinks.k1.flumeBatchSize = 20
#最短多长时间间隔进行发送一次 单位毫秒
empi.sinks.k1.kafka.producer.linger.ms = 1