生产者
kafka在0.8.2版本开发了一套java版本的client api,对原来包里面的生产者和消费者逻辑用java语言重新实现,独立了一个新的client包。在 0. 10 版本之后的 Kafka推荐使用java版本的客户端。在0.8.2版本之前还是使用老的Scala语言编写的客户端。 在启动生产者之前一些重要的配置介绍。生产者有很多属性可以设置,大部分都有合理的默认值,无需调整。有些参数可能对内存使用,性能和可靠性方面有较大影响。 acks:代理收到消息后向生产者发生消息确认,生产者根据acks值做出相应的处理。通过设置request.required.acks 设置,取值可为 0、-1 、 l 中之一,默认取 l 。 (1)acks=0 生产者发送信息到代理,不需要等待代理响应,可以连续的发送消息。这种提供的吞吐量,但是有可能会丢失数据。 (2)acks=1 生产者发送消息到代理,需要等待leader副本已经成功的将消息写入到日志文件中,这种方式一定程度上降低了丢失数据的可能性,但是也会出现丢失数据的情况。如果leader副本在接收到消息后突然宕机,然后其他的follower副本还未来得及进行数据同步,这个时候重新进行leader选举,新的leader副本是从原理的follower副本中选举的,那么原理leader副本中接收到的还未来得及同步得消息就会丢失。 (3)acks=-1 leader副本和其他isr列表中的副本都完成了数据存储才会向生产者发送确认消息。这种策略只要leader副本和follower副本至少有一个存活数据就不会丢失。为了保证数据不丢失,就需要保证同步的副本个数需要至少大于1 ,通过配置 min.insync.replicas 设置,当同步副本数不足此配置值时,生产者会抛出异常。这种吞吐量比较高。 batch.num.messages :Kafka 支持消息批量向代理特定分区 发送消息,表示每次批量发送消息的最大消息数, 当生产者采用同步模式发送时该配置项将失效。 message.send.max.retries 生产者向代理发送消息失败后重试次数,默认是3次
|