美文网首页
Kafka配置详解

Kafka配置详解

作者: 幽篁处山鬼 | 来源:发表于2017-09-07 20:13 被阅读1093次

    kafka基本概念及配置详解

    kafka 基本概念

    Topic 主题,声明一个主题,producer指定该主题发布消息,订阅该主题的consumer对该主题进行消费

    Partition 每个主题可以分为多个分区,每个分区对应磁盘上一个目录,分区可以分布在不同broker上,producer在发布消息时,可以通过指定partition key映射到对应分区,然后向该分区发布消息,在无partition key情况下,随机选取分区,一段时间内触发一次(比如10分钟),这样就保证了同一个producer向同一partition发布的消息是顺序的。 消费者消费时,可以指定partition进行消费,也可以使用high-level-consumer api,自动进行负载均衡,并将partition分给consumer,一个partition只能被一个consumer进行消费

    Consumer 消费者,可以多实例部署,可以批量拉取,有两类API可供选择:一个simpleConsumer,暴露所有的操作给用户,可以提交offset、fetch offset、指定partition fetch message;另外一个high-level-consumer(ZookeeperConsumerConnector),帮助用户做基于partition自动分配的负载均衡,定期提交offset,建立消费队列等。simpleConsumer相当于手动挡,high-level-consumer相当于自动挡。

    simpleConsumer:无需像high-level-consumer那样向zk注册brokerid、owner,甚至不需要提交offset到zk,可以将offset提交到任意地方比如(mysql,本地文件等)。

    high-level-consumer:一个进程中可以启多个消费线程,一个消费线程即是一个consumer,假设A进程里有2个线程(consumerid分别为1,2),B进程有2个线程(consumerid分别为1,2),topic1的partition有5个,那么partition分配是这样的:
    partition1 ---> A进程consumerid1
    partition2 ---> A进程consumerid1
    partition3 ---> A进程consumerid2
    partition4 ---> B进程consumer1
    partition5 ---> B进程consumer2

    Group High-level-consumer可以声明group,每个group可以有多个consumer,每group各自管理各自的消费offset,各个不同group之间互不关联影响。

    由于目前版本消费的offset、owner、group都是consumer自己通过zk管理,所以group对于broker和producer并不关心,一些监控工具需要通过group来监控,simpleComsumer无需声明group。

    kafka配置详解

    #当前机器在集群中的唯一标识,和zookeeper的myid性质一样
    broker.id=1
    #当前kafka对外提供服务的端口默认是9092
    port=19092 
    #这个参数默认是关闭的,在0.8.1有个bug,DNS解析问题,失败率的问题。
    host.name=192.168.1.224
    #这个是borker进行网络处理的线程数
    num.network.threads=3 
    #这个是borker进行I/O处理的线程数
    num.io.threads=8 
    #消息存放的目录,这个目录可以配置为“,”逗号分割的表达式,上面的num.io.threads要大于这个目录的个数这个目录,如果配置多个目录,新创建的topic他把消息持久化的地方是,当前以逗号分割的目录中,那个分区数最少就放那一个
    log.dirs=/usr/local/kafka/kafka_2.11-0.9.0.1/kafka_log
    #发送缓冲区buffer大小,数据不是一下子就发送的,先回存储到缓冲区了到达一定的大小后在发送,能提高性能
    socket.send.buffer.bytes=102400 
    #kafka接收缓冲区大小,当数据到达一定大小后在序列化到磁盘
    socket.receive.buffer.bytes=102400 
    #这个参数是向kafka请求消息或者向kafka发送消息的请请求的最大数,这个值不能超过java的堆栈大小
    socket.request.max.bytes=104857600 
    #默认的分区数,一个topic默认1个分区数
    num.partitions=1 
    #默认消息的最大持久化时间,168小时,7天
    log.retention.hours=168 
    #消息保存的最大值5M
    message.max.byte=5242880 
    #kafka保存消息的副本数,如果一个副本失效了,另一个还可以继续提供服务
    default.replication.factor=2 
    #取消息的最大直接数
    replica.fetch.max.bytes=5242880 
    #这个参数是:因为kafka的消息是以追加的形式落地到文件,当超过这个值的时候,kafka会新起一个文件
    log.segment.bytes=1073741824 
    #每隔300000毫秒去检查上面配置的log失效时间(log.retention.hours=168 ),到目录查看是否有过期的消息如果有,删除
    log.retention.check.interval.ms=300000 
    #是否启用log压缩,一般不用启用,启用的话可以提高性能
    log.cleaner.enable=false 
    #设置zookeeper的连接端口
    zookeeper.connect=192.168.1.224:2181,192.168.1.225:2181,192.168.1.226:1218 
    

    相关文章

      网友评论

          本文标题:Kafka配置详解

          本文链接:https://www.haomeiwen.com/subject/lvhwjxtx.html