借助实验室的机器资源和项目需求,参与搭建kafka集群和测试特性。

集群搭建

机器资源

  • 系统
    1. CentOS
  • 网络
    1. 有内部DNS服务或者修改hosts文件保证集群机器通过hostname相连。
    2. 修改防火墙,暴露相关端口。(2181,9092等)
  • 磁盘
    1. 因为linux的磁盘是通过挂载点加入整个文件系统的,不能想当然认为某个目录下就具有足够大的磁盘空间,需要确认好文件存放目录,保证空间足够。

安装文件

  • JDK 1.8
  • Zookeeper 3.4.x
  • kafka 2.0.0

运行

  • Zookeeper不同节点的配置文件没有区别,这使得启动较为容易,先copy一份配置到本地,修改后scp到集群机器上。
  • kafka的配置文件中需要指明id,这里我同样copy一份配置,上传配置,然后通过sed修改broker_id。
  • 在远程写shell脚本调用时,经常需要考虑加\,比如\$,根据语义不同:本机解析和远程解析。
  • shell的缩进没什么意义,但可读性好,只是cat >> eof …… eof的写法,会把空格制表都算上。
  • 一些命令会有交互过程,差不多就是-y -i -f等就可以去掉交互。

集群测试

kafka常用配置

  • broker
    • 内存分配默认只有1g,最好增大至6g,缓冲buffer不宜过大,不然会出现阻塞,程序假死。
  • topic
    • partition才具有master/slave,所以分区不能太少,应该和节点数相当或者稍多。
    • replicafactor,备份数量,一般为3。
  • producer
    • acks:决定broker返回的时间点,0: 一接收就返回 1: 一个broker持久化返回 2: 所有副本持久化返回
  • consumer
    • consumer具有client-id和group-id,以此来区分它的offset。

测试工具

性能监控

  • prometheus

集群监控

  • cruise-control
    • 支持2.0.0版本,但没有图形化
  • kafka-manager
    • 有图形化,但没有跟上最新版本,虽然勉强也能用,但可能有未知bug。

多数据中心

多数据中心对于大公司而言也是必然场景,此时就存在多集群的备份,同步等问题,非常麻烦。

  • uReplicator:Uber开发的一个mirrormaker的增强版,用于跨集群拷贝数据。
  • confluent replicator connector: Confluent开发的一种connector,也用于跨集群拷贝。

工作内容

  • 熟悉kakfa概念、设计原理,掌握常用命令。
  • 调整机器参数,测试kafka性能和高可用特性。
  • 兼容模块,引入trace。