4

我正在测量 kafka 生产者生产者的表现。目前我遇到了两个配置和使用略有不同的客户:

常见的:

def buildKafkaConfig(hosts: String, port: Int): Properties = {
  val props = new Properties()    
  props.put("metadata.broker.list", brokers)
  props.put("serializer.class", "kafka.serializer.StringEncoder")
  props.put("producer.type", "async") 
  props.put("request.required.acks", "0")
  props.put("queue.buffering.max.ms", "5000")
  props.put("queue.buffering.max.messages", "2000")
  props.put("batch.num.messages", "300")
  props
}

第一个客户:

"org.apache.kafka" % "kafka_2.11" % "0.8.2.2" 

用法:

val kafkaConfig = KafkaUtils.buildKafkaConfig("kafkahost", 9092)
val producer = new Producer[String, String](new ProducerConfig(kafkaConfig))

// ... somewhere in code 
producer.send(new KeyedMessage[String, String]("my-topic", data))

第二个客户:

"org.apache.kafka" % "kafka-clients" % "0.8.2.2"

用法:

val kafkaConfig = KafkaUtils.buildKafkaConfig("kafkahost", 9092)
val producer = new KafkaProducer[String, String](kafkaConfig)
// ... somewhere in code 
producer.send(new ProducerRecord[String, String]("my-topic", data))

我的问题是:

  • 2个客户有什么区别?
  • 对于大规模应用程序,我应该配置哪些属性,以实现最佳的高重写入性能?
4

1 回答 1

7

2个客户有什么区别?

它们只是旧 API 与新 API。从 0.8.2.x 开始的 Kafka 暴露了一组新的 API 来与 kafka 一起使用,较旧的 API 可以ProducerKeyedMessage[K,V]新 APIKafkaProducer一起使用ProducerRecord[K,V]

从 0.8.2 版本开始,我们鼓励所有新开发人员使用新的 Java 生产者。此客户端经过生产测试,通常比以前的 Scala 客户端更快且功能更全面。

您最好使用受支持的新版本。

对于大规模应用程序,我应该配置哪些属性,以实现最佳的高重写入性能?

这是一个非常广泛的问题,很大程度上取决于您的软件架构。它随规模、生产者数量、消费者数量等而变化。有很多事情需要考虑。我建议阅读文档并阅读有关 Kafka 架构和设计的部分,以更好地了解它的内部工作原理。

一般来说,根据我的经验,您需要平衡数据的复制因子,以及每个队列进入的保留时间和分区数量。如果您有更具体的问题,您绝对应该发布一个问题。

于 2016-03-14T11:14:09.287 回答