kafka ProducerRecord 和 KeyedMessage 有什么区别

what is the difference between kafka ProducerRecord and KeyedMessage

我正在测量 kafka producer producer 的性能。 目前我遇到了两个配置和用法略有不同的客户:

常见:

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))

我的问题是:

what is the difference between 2 clients?

他们只是old vs new APIs。 Kafka 从 0.8 开始。2.x 公开了一组新的 API 来与 kafka 一起工作,旧的 ProducerKeyedMessage[K,V] 一起工作,其中新的 API 是KafkaProducerProducerRecord[K,V]:

As of the 0.8.2 release we encourage all new development to use the new Java producer. This client is production tested and generally both faster and more fully featured than the previous Scala client.

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

Which properties should I configure, take into account to achieve optimal, high heavy writes performance, for high scale application?

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

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