Как реализовать Kafka Consumer в Scala

Я пытаюсь реализовать потребителя Кафки в scala. Я видел миллион учебников о том, как это сделать на Java, и даже некоторые (как это), которые говорят, что это для scala, но это написано на Java.

кто-нибудь знает где я могу найти пример как написать это в Scala? Я только начал изучать Scala, поэтому, возможно, связанный пример можно использовать в Scala, даже если он написан на Java или что-то еще, но я честно не знаю, что я делаю в данный момент. Все, что я google, просто связывает меня с тем, как это сделать на Java.

2 ответов


причина вы видите, большинство примеров в Java заключается в том, что новый KafkaProducer запуск 0.8.2.2 написан на Java.

предполагая, что вы используете sbt в качестве системы сборки, и предполагая, что вы работаете с Kafka 0.8.2.2 (вы можете изменить версию по мере необходимости), вам понадобится:

libraryDependencies ++= {
  Seq(
    "org.apache.kafka" %% "kafka" % "0.8.2.2",
    "org.apache.kafka" % "kafka-clients" % "0.8.2.2",
  )
}

простой пример должен заставить вас начать:

import scala.collection.JavaConverters._
import org.apache.kafka.clients.consumer.KafkaConsumer
import org.apache.kafka.common.serialization.StringDeserializer 

object KafkaExample {
  def main(args: Array[String]): Unit = {
    val properties = new Properties()
    properties.put("bootstrap.servers", "localhost:9092")
    properties.put("group.id", "consumer-tutorial")
    properties.put("key.deserializer", classOf[StringDeserializer])
    properties.put("value.deserializer", classOf[StringDeserializer])

    val kafkaConsumer = new KafkaConsumer[String, String](properties)
    kafkaConsumer.subscribe("firstTopic", "secondTopic")

    while (true) {
      val results = kafkaConsumer.poll(2000).asScala
      for ((topic, data) <- results) {
        // Do stuff
      }
    }
}

вы также можете посмотреть на рабочий шаблон, полностью построенный на Scala здесь:https://github.com/knoldus/activator-kafka-scala-producer-consumer Это приложение содержит код, который вы хотите использовать здесь.

надеюсь, я решил вашу проблему спасибо !