2.1选择操作系统
kakfa支持的操作系统 windos,linux ,macos
2.1.2 安装java 配置环境变量
2.1.3 安装zookeeper,https://blog.youkuaiyun.com/skycanf/article/details/81233883
2.2 安装kafka broker
http://kafka.apache.org/downloads 选择一个稳定版本就行
单机环境安装,官网已经给了 http://kafka.apache.org/quickstart
2.3 broker 配置:
2.3.1 常规配置
broker.id :每个broker都需要有一个标识符,使用brokerid;来表示,默认值为0,可以被设置为任意整数, 这个值作为kafka集群中必须是唯一的,(建议,设置为与机器名相关的整数,这样在维护的时候,id号映射到机器名就没那么麻烦)例如,机器名包含唯一性的数字(host1.example.com,host2.example.com)1和2 设置为brokerid 最好不过了
port:启动kafka,监听9092端口, 可任意配置,注意若使用1024以下端口,需要使用root权限启动kafka。
zookeeper.connect: 用于保存broker元数据的zookeeper地址, localhost:2181 表示 zookeeper是运行在本地的2181端口上,该配置参数是用冒号分隔的一组hostname:port/path
hostname:是zookeeper服务器的机器名或ip地址
port 是zookeeper的客户端连接端口
/path 是可选的zookeeper路径,作为kafka的集群chroot环境,默认使用根路径。 若指定路径不存在,broker启动时候会创建它。
为什么使用chroot路径:zookeeper群组共享给其他应用程序,及时还有其他kafka集群存在,也不会产生冲突,最好是在配置文件里指定一组zookeeper服务器,用分号隔开,一旦一个zookeeper宕机,broker可以连接到zookeeper群组其他节点。
log.dirs :kakfa把所有消息保存在磁盘上,存放这些日志片段的目录是通过log.dir来指定的,它是一组用逗号分隔的本地文件系统路径,若指定多个路径,会根据broker最少使用原则,被同一个分区的日志片段保存在同一个路径下,注意,broker会往拥有最小数目分区的路径新增分区,而不是最小磁盘空间的路径新增分区。
number.recovery.threads.per.data.dir
在,服务器正常启动,用于打开每个分区的日志片段,服务器崩溃重启,用于检查和截短每个分区的日志片段,正常关闭,
kafka会使用可配置的线程池处理日志片段 默认情况下,每个日志目录只使用一个线程,
如果该参数设为8,并且log.dir 指定三个路径,那么需要总线程为24 个。
auto .create.topic .enable
默认情况下“kafka”会在以下情况自动创建主题
当一个生产者开始往主题写入消息时候:
当一个消费者开始从主题读取消息时候:
当任何一个客户端向主题发送元数据请求时候
若显式创建主题,该值设置为false
2.3.2 主题的默认配置
1.num.partitions
参数指定了新创建的主题包含多少个分区,默认参数为1, 自动创建主题的分区使用默认值,
如何断定分区数量:
估算方法: 主题的存吐量/ 消费者吞吐量==分区个数
也就是说,每秒要从主题上写入和读取1gb数据,并且每个消费每秒可以处理50m数据,那至少需要20个分区, 这样可以让20个消费者同事读取这些分区,从而达到每秒1g的吞吐量。 若没有这些信息,把分区大小设置在25gb以内 为理想的效果
2.log.retention.ms
kafka通常根据时间来决定数据可以保留多久。使用log.rentention.hours 参数来配置,默认168小时,
根据时间保留诗句是通过检查磁盘上的日志片段文件的最后修改时间是实现的,一般来说,最后的修改时间指的是日志片段的关闭时间,也就是文件里最后一个消息的时间戳,若使用管理工具在服务器间移动分区,最后的时间就不是很准确了,
3. log.retention.byres
另一种方式通过保留消息字节数来判断消息是否过期。作用是在每个分区上,如果一个包含8个分区的主题,并且每个设置1gb,那么主题最多可以保留8g的数据,所以当主题的分区个数增加,整个主题保留的数据也增加。
4. log.segement.bytes
以上的设置都是作用在日志片段上,而不是作用在单个消息上, 当消息到达broker时候,他们被追加到分区的当前日志片段上,到达该参数上线默认1gb,日志就会被关闭,一个新的日志被打开,这个参数越小,就会频分的关闭和分配新文件,从而降低磁盘的整体效率。 举例,主题每天只能接受100mb ,那么需要10天时间才能填满一个日志片段,若log.retention.ms为7,则还要追加7天,才会过期,
5.log.segement.ms
和上面3一样,
6.message.max.bytes
broker通过设置该参数来限制单个消息的大小,默认1000000 =1mb,若生产者发送的消息超大这个大小,消息会被拒收,
该消息泛指,被压缩后的消息大小,消息的实际大小可以远大于该值,
2.4 硬件的选择 磁盘存吐量,容量,内存,cpu
2.4.1 因为生产者发送消息到服务器保存,需要服务器确认消息提交成功,也就是说,磁盘写入速度越快,生成的消息延迟就低。
机械硬盘,便宜,容量大,可配置磁盘阵列
固态硬盘,查找访问速度快,
2.4.2 磁盘容量
需要多大的磁盘容量取决于需要保留的消息数量,如果服务器每天收到1tb消息,保留7天,则需要7tb的存储空间,额外的文件10% 还有缓存区。用于应付流量增长和波动
2.4.3 内存
内存容量是影响服务端的因素之一,磁盘性能影响生产者,内存影响消费者,消费者一般从分区尾部读取消息,如果有生产者在,就紧跟在生产者后面,在这种情况下,消费者读取的消息会直接存放在系统的页面缓存中, jvm的页面缓存是共享的,所以一般建议kafka程序不和重要的应用程序部署在一起。,以免降低kafka的性能。
2.4.4 网络 网络吞吐量决定了kafka能够处理最大的数据流量。
2.4.5 cpu kafka对计算机处理能力要求相对较低,
2.5 云端的kafka
2.6 kafka集群
集群可以数据复制。
2.6.1 需要多少个broker
2.6.3 操作系统调优“
vm.swappiness=0
vm.dirty_ratio=60-80(选之间)
net.core.wmem_default=2097152(2mb)
net.core.rmem_default=2097152(2mb)
nip.ipv4.tcp_window_scaing=1
2.7.1 垃圾回收器
MaxGcPauseMillis=200ms java7以后的一个G1垃圾回收器,该参数指定每次垃圾回收默认的停顿时间
InitiatingHeap0ccupancyPercent :默认是45,改参数指定G1启动新一轮垃圾回收之前可以使用的堆内存百分比 包含新生代,老年代的内存 在堆到达45%之前,G1不会启动
kakfa对堆使用率非常高,例如:64gb服务器,使用5gb堆运行kafka,上面俩参参数可设置为MaxGcPauseMillis=20ms,InitiatingHeap0ccupancyPercent=35
2.7.2 数据中心布局
broker避免在一个机架上,
2.7.3 共享zookeeper,
kafka使用zookeeper来保存broker,主题,分区的元数据。
kafka0.9.0.0版本之前,除了broker之外,消费者也会使用zookeeper来保存一些信息,如,主题,偏移量,群组,
0.9之后,kafka新引入一个接口,允许broker直接维护这些信息。
0.9之前,消费者将偏移量提交到zookeeper 上,合理提交间隔为1分钟,
zookeeper群组最好不要共享到其他程序,因为kafka对zookeeper的延迟和超时比较敏感,若与zookeeper通信异常,导致broker离线,kafka集群就会有异常。