kafka-集群环境搭建

概述

kafka是开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息

版本选择

kafka官网地址:http://kafka.apache.org,kafka组件(或者其它工具组件)旨在选择次新版本,相对新版和旧版存在的错误要低一些且更稳定,选择的版本如下图:
在这里插入图片描述

部署方式

服务器要求
1、 磁盘IO读写性能要好,150M/s 以上。
2、 CPU 4核以上。
3、 内存最低分配2G kafka启动。
4、 至少3台服务器环境
5、 创建bigdata用户,布署包放在:/home/bigdata/app 路径下
集群性能
根据发送日志的TPS评估,超过1000TPS,建议做3个实例集群。
TPS较低时,可考虑单机。
主题
建议根据业务数据类型创建不同主题,当一个主题发送消息过多时,可再进一步细分。
合理创建主题,也是提高kafka整体吞吐能力的一个重要手段。
分区
考虑到充分利用机器资源和提高kafka的吞吐、扩展性,建议默认每个主题创建三个分区。
通过后期使用观察,可根据消息实际消息消费效率,再进一步划分。

配置

broker.id=0
port=9092
host.name=192.168.8.209
num.network.threads=3
num.io.threads=8
socket.send.buffer.bytes=102400
socket.receive.buffer.bytes=102400
socket.request.max.bytes=104857600
log.dirs=/home/bigdata/app/kafka_2.11-1.1.1/logs
num.partitions=3
num.recovery.threads.per.data.dir=1
offsets.topic.replication.factor=3
transaction.state.log.replication.factor=3
transaction.state.log.min.isr=3
default.replication.factor=3
log.retention.hours=48
log.retention.bytes=214748364800
log.segment.bytes=1073741824
log.retention.check.interval.ms=300000
zookeeper.connect=192.168.8.207:2181,192.168.8.208:2181,192.168.8.209:2181
zookeeper.connection.timeout.ms=6000
group.initial.rebalance.delay.ms=0

linux常用命令

1. 启动kafka
./bin/kafka-server-start.sh -daemon ./config/server.properties
2. 查看topic列表
./bin/kafka-topics.sh --zookeeper 127.0.0.1:2181 --list
3. 查看单个topic部署信息
./bin/kafka-topics.sh --topic test_topic --describe --zookeeper localhost:2181
4. 模拟消费
/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test_topic --from-beginning
5. 删除
./bin/kafka-topics.sh --topic test_topic --delete --zookeeper localhost:2181
6. 启动kafka带jmx端口
JMX_PORT=9988 ./bin/kafka-server-start.sh -daemon ./config/server.properties

摸拟测试往kafka生产数据

private static Producer<String, String> producer;

    /**
     * 生产者,注意kafka生产者不能够从代码上生成主题,只有在服务器上用命令生成
     */
    private static void setProducer() {
        Properties props = new Properties();
        props.put("bootstrap.servers", "192.168.8.207:9092,192.168.8.208:9092,192.168.8.209:9092");//服务器ip:					  端口号,集群用逗号分隔
        props.put("acks", "all");
        props.put("retries", 0);
        props.put("batch.size", 16384);
        props.put("linger.ms", 1);
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        producer = new KafkaProducer<>(props);
    }
   /**
     * 发送对象消息 至kafka上,调用json转化为json字符串,应为kafka存储的是String。
     * 这是一个单条记录的demo,多条请自行循环
     */
    private static void sendMsgToKafka() {
        //这是扣的一条记录,有数据就直接操作,蛋疼
        String[] msgs ={"{\"id\":\"1\",\"name\":\"test\"},{\"id\":\"2\",\"name\":\"test2\"}"};

        try {
            //jackson操作json,添加一个标识然后转回String并发送至kafka
            ObjectMapper mapper = new ObjectMapper();
            for (String msg : msgs) {
                    ObjectNode tablejson = (ObjectNode) mapper.readTree(msg);
                    tablejson.put("_tag_", "log_alarmevent");
                    producer.send(new ProducerRecord<String, String>	("log_useroperate_topic",tablejson.toString()));
                }
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    private static void closeKafkaProducer() {
        producer.close();
    }
    public static void main(String[] args) {
        setProducer();
        sendMsgToKafka();
        closeKafkaProducer();
    }

Kafka部署验证

集群高可用
1、 持续发送、接收消息
2、 KILL掉其中任意一个节点,消息发送和接收正常
3、 然后重新启动被KILL掉的节点,查看集群信息,节点重新加入,消息发送和接收正常
配置验证
1、 允许自动创建主题(发送消息时,主题不存在)
2、 每个主题默认创建三个分区
3、 日志文件最大200G,保留时间48小时
4、 每个主题,只有三份数据
验证消息完整性
生产者发布100万条消息,每条1K。消费者准确接收到100万条消息。
性能基准测试
使用kafka-producer-perf-test.sh工具对kafka集群做性能基准测试:
采用异步发送模式,每个消息1K数据
线程数 Records/s MB/s
100
200
300
400
500
压力测试
使用kafka-producer-perf-test.sh工具,500线程,1k数据,对kafka集群做3小时不间断压力测试,验证整个集群的稳定性。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值