贫农的大数据之二(Kafka)

来源:互联网 发布:用什么看网络电视好 编辑:程序博客网 时间:2024/05/21 14:59

Kafka集群部署

部署环境

实体机2台,CPU:4核,内存:8G,硬盘:SAS 600G RAID1,网卡:1000M。
ip分别为192.168.0.136,192.168.0.137。系统均为Centos 6.3

软件版本

SUN JDK 1.6
Zookeeper 3.4.5 ,这里我使用了3个节点的集群分别为:zkserver1,zkserver2,zkserver3
Kafka 0.7.2

安装过程

  1. 下载编译
    tar xzf kafka-<VERSION>.tgzcd kafka-<VERSION>./sbt update./sbt package
  2. 配置,修改config/server.properties文件,需要修改的属性有:
    brokerid - broker的id,每个broker唯一,136设置为1,137设置为2
    hostname - 设置为本机的ip
    num.threads - 设置为4
    num.partitions - Kafka分区数,设置为3,决定了consumer和producer最大并发数
    log.dir - 这是kafka持久化数据的目录,设置到SAS硬盘区
    zk.connect - zkserver1:2181,zkserver2:2181,zkserver3:2181/kafka
  3. 设置JVM
    修改bin/kafka-run-class.sh,找到KAFKA_OPTS并修改如下
    java -server -Xms3072m -Xmx3072m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution -Xloggc:logs/gc.log -Djava.awt.headless=true -Dcom.sun.management.jmxremote -classpath <long list of jars>
  4. 在zookeeper中创建znode,
    create /kafka kafka_data
  5. 启动kafka服务器
    #nohup  bin/kafka-server-start.sh config/server.properties &
  6. 验证Kafka安装
    发送测试数据
     bin/kafka-console-producer.sh --zookeeper zkserver1:2181,zkserver2:2181,zkserver3:2181/kafka --topic test
    接收测试数据
     bin/kafka-console-consumer.sh --zookeeper zkserver1:2181,zkserver2:2181,zkserver3:2181/kafka --topic test --from-beginning 

  7. 日志修改,当前版本的kafka使用log4j,所以修改config/log4j.properties即可

Kafka压力测试

测试kafka集群配置

测试中使用2台实体机与上面的不同,因为测试在生产环境部署之前做的,而且很遗憾当时没有测试下生产环境下的性能。
服务器具体配置如下是,cpu:E5507*1,内存:8G*2,硬盘:SCSI 500G
同时这2台加上同样配置的一台部署有zookeeper,每个使用3G内存
kafka JVM配置为: -Xms3072m -Xmx3072m -XX:NewSize=256m -XX:MaxNewSize=256m -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70
测试客户端程序为java编写,测试结果图中的X轴为时间,每5秒一次计算;Y轴为5秒内平均每秒发送的消息数

测试用例-1
Producer测试客户端服务器:1个,配置为4核CPU,6G内存
Producer线程数:20个
Producer实例数:20个,即每个线程一个Producer实例
Producer发送方式:同步发送
分别使用string和avro两种数据格式,每种数据格式分别测试30、50、100、150、200个字节的消息


从图中可以看出string-200B的吞吐量可以达到40MByte/Second

测试用例-2
与测试用例1相比,增加一个客户端进行测试
Kafka节点数:2个
Producer测试客户端服务器:2个
Producer线程数/客户端:20个
Producer实例数/客户端:20个,即每个线程一个
Producer发送方式:同步发送
分别使用string和avro两种数据格式,每种数据格式分别测试30、50、100、150、200个字节的消息
测试结果与测试用例1差不多,可见增加客户端已经没有意义

测试用例-3
与测试用例1相比,减少一个kafka服务器
Kafka节点数:1个
Producer测试客户端服务器:1个
Producer线程数:20个
Producer实例数:20个,即每个线程一个
Producer发送方式:同步发送
仅仅使用avro这一种数据格式,分别测试30、50、100、150、200个字节的消息

图中是测试环境下一个Kafka与两个Kafka的对比测试,其中xxx-one的表示使用一个kafka,xxx-two的表示使用两个kafka
从图中可以看到平均两个Kafka服务器比一个服务器有50K的增长,性能大概提升30%-40%。在一个
Kafka节点情况下,吞吐量能达到 30MB/sec,比官方的50MB/sec有差距。但是考虑到官方服务器配置和官方使用异步+batch方式测试,这个数值还是可以接受
的。也能够满足我们的场景。下图为官方的测试结果供参考


测试用例-4
与测试用例1相比,多线程共用一个Producer实例
Kafka节点数:2个
Producer测试客户端服务器:3个
Producer线程数:20个
Producer实例数:1个,即所有线程共享一个实例
Producer发送方式:同步发送
仅仅使用String这一种数据格式,这样排除自定义的avro序列化影响,测试100个字节的消息
测试结果:每个客户端的平均每秒发送78000左右的消息,这个与多线程多Producer实例的性能有很大差别,很明显!不过对服务器端无任何影响,3台测试端也能够使服务器吞吐量达到最大。
所以Producer的单态模式对客户端性能有影响,但是反过来说对于web服务器这个性能还是足够了,所以实际实现时不用刻意追求,除非要求
单台客户端性能最大化。

0 0
原创粉丝点击