kafka ProducerRecord和KeyedMessage有什么区别

Jul*_*ias 3 scala apache-kafka kafka-producer-api

我正在衡量卡夫卡制片人的制作人员表现.目前我遇到了两个配置和用法不同的客户端:

共同:

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
}
Run Code Online (Sandbox Code Playgroud)

第一客户:

"org.apache.kafka" % "kafka_2.11" % "0.8.2.2" 
Run Code Online (Sandbox Code Playgroud)

用法:

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))
Run Code Online (Sandbox Code Playgroud)

第二位客户:

"org.apache.kafka" % "kafka-clients" % "0.8.2.2"
Run Code Online (Sandbox Code Playgroud)

用法:

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))
Run Code Online (Sandbox Code Playgroud)

我的问题是:

  • 2个客户有什么区别?
  • 我应该配置哪些属性,考虑到实现最佳,高重写性能,适用于大规模应用?

Yuv*_*kov 6

两个客户有什么区别?

它们只是旧的和新的API.卡夫卡开始0.8.2.x曝光了一组新的API与卡夫卡的工作,老年福利Producer与工作KeyedMessage[K,V]在新的API是KafkaProducerProducerRecord[K,V]:

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

您最好使用新支持的版本.

我应该配置哪些属性,考虑到实现最佳,高重写性能,适用于大规模应用?

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

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