9.3.0Storm集成Kafka中KafkaSpout配置参数释义

Storm集成Kafka中KafkaSpout配置参数释义

KafkaSpout构造:

涉及到两个类:

      SpoutConifg、KafkaConfig、ZkHosts

一、       SpoutConfig:

zkServers: KafkaSpout保存offset的zookeeper所在地址. 立出来这个属性是为了防止offset保存位置不在kafka集群中. 如果kafka和storm在一个集群,该属性可以忽略

zkPort: KafkaSpout保存offset的zookeeper端口.  如果kafka和storm在一个集群,该属性可以忽略。

zkRoot: offset在zookeeper中保存的路径.路径计算方式为:${zkRoot}/${id}/${partitionId}

id:kafkaSpout保存offset的不同客户端区分标志.

    建议每个拓扑使用固定的,不同的参数,以保证拓扑重新提交之后,可以从上次位置继续读取数据.如果两个拓扑公用同一个id,那么可能会被重复读取

    如果在拓扑中使用了动态生成的uuid来作为id,那么每次提交的拓扑,都会从队列最开始位置读取数据.

stateUpdateIntervalMs: offset刷新到zookeeper中的时间间隔. 单位:毫秒

failedMsgRetryManagerClass:消息失败的重试策略. 调用OutputCollector.fail().只有在使用ExponentialBackoffMsgRetryManager时才会生效.
       
retryInitialDelayMs: 连续重试之间的初始延迟.
retryDelayMultiplier:连续重试之间延迟倍数.retryDelayMaxMs: 连续重试之间的最大延迟.retryLimit:如果retryLimit小于零,失败的消息将无限重试。

二、       KafkaConfig

hosts: Kafka地址和分区关系对应信息

topic: 要从kafka中读取的topic队列名称

clientId:Kafka的客户端id参数,该参数一般不需要设置. 默认值为kafka.api.OffsetRequest.DefaultClientId()

fetchSizeBytes: Kafka Consumer每次请求获取的数据量大小.每次获取的数据消费完毕之后,才会再获取数据. 默认1MB

socketTimeoutMs: Kafka SimpleConsumer 客户端和服务端连接的超时时间. 单位:毫秒

fetchMaxWait: Kafka Consumer每次获取数据的超时时间.单位:毫秒

bufferSizeBytes: Kafka Consumer通过网络IO获取数据的socket buffet大小.默认1MB

scheme:该参数有两个作用:

    1:申明输出的数据字段 declareoutputFileds

    2:对从kafka中读到的数据进行反序列化,即将byte字节数组转为tuple对象。

        对kafka存入数据的key和message都比较关心的,可以使用KeyValueSchemeAsMultiScheme,如果不关心,可以使用SchemeAsMultiScheme.默认接口实现一般都只会输出一个字段或者两个字段,很多时候,我们需要直接从kafka中读取到数据之后,就将每个字段解析了,然后进行简单处理再emit这个时候,建议自己实现MultiScheme接口。

        ignoreZkOffsets:在拓扑提交之后,KafkaSpout会从zookeeper中读取以前的offset值,以便沿着上次位置继续读取数据。KafkaSpout会检查拓扑ID和zookeeper中保存的拓扑id是否相同。

        如果不同,并且ignoreZkOffsets=true,那么就会从startOffsetTime参数位置读取数据.否则,沿着zookeeper中保存的offset位置继续读取数据。也就是说,当ignoreZkOffsets=true的时候,kafkaspout只能保证在拓扑不杀掉的情况下,当worker进程异常退出的时候,会沿着上次读取位置继续读取数据,当拓扑重新提交的时候,就会从队列最早位置开始读取数据。这样就会存在重复读取数据的问题,所以正式场景,该参数还是应该设置为false。以保证任何场景数据的只被读取一次。

        startOffsetTime:拓扑第一次提交,zookeeper中没有保存对应offset的情况下,默认从kafka中读取的offset位置。默认从队列最早位置开始读取数据,即从队列最开始位置读取数据。

        默认为kafka.api.OffsetRequest.EarliestTime()开始读,也就是从Kafka中最早的消息开始处理。

        也可以设成kafka.api.OffsetRequest.LatestOffset,也就是最早的消息开始读。也可以自己指定具体的值。

maxOffsetBehind:如果当前的(offset值-failed offsets中最小值) < maxOffsetBehind 那么就会清理failed列表中所有大于maxOffsetBehind的offset值。

                这是为了防止failed过多,重发太多导致内存溢出。不过默认为了保证数据不丢失,所以maxOffsetBehind设置的最大。

                这个字段对于KafkaSpout的多个处理流程都有影响。当KafkaSpout对某个partition的处理进度落后startOffsetTime对应的offset多于此值时, KafkaSpout会丢弃中间的消息,从而强制赶上目标进度.比如,如果startOffsetTime设成了lastestTime,

                那么如果进度落后超过maxOffsetBehind,KafkaSpout会直接从latestTime对应的offset开始处理。如果设成了froceFromStart,

                则在提交新任务时,始终会从EarliestTime开始读。

useStartOffsetTimeIfOffsetOutOfRange:当KafkaSpout初始化之后,使用从zookeeper中读取的上次记录的offset.从kafka中获取数据失败,返回offsetOutofRange错误之后,是否使用startOffset从队列最早位置重新获取数据。 offsetOutofrange一般发生在topic被重建,分片被删除的场景。

metricsTimeBucketSizeInSecs: metric监控信息采集间隔。

三、       ZkHosts

brokerZkStr: kafka集群zookeeper地址.

brokerZkPath: kafka集群中broker元数据所在地址.默认为/brokers

refreshFreqSecs: kafka broker分区信息刷新时间间隔. 单位:秒.

                当kafka有broker节点重启或者分区信息发生变化而导致数据读取失败的时候,都会重新触发一次分区信息刷新.






本文参考:

http://blog.csdn.net/ransom0512/article/details/50497261

http://storm.apache.org/releases/2.0.0-SNAPSHOT/storm-kafka.html

猜你喜欢

转载自blog.csdn.net/simon_09010817/article/details/80090239