Я только начинаю работать с Kafka, это звучит очень хорошо для микросервисов, но в основном я работаю на Scala.
Я добавил kafka в свой проект sbt следующим образом:
libraryDependencies += "org.apache.kafka" %% "kafka" % "2.0.0"
Затем я делаю это:
import org.apache.kafka.clients.producer.{Callback,KafkaProducer, Producer}
...
val producer = new KafkaProducer[String, String](props)
val record = new ProducerRecord[String, String]("my-topic", "key", "value")
val fut = producer.send(record, callBack)
...
Моя проблема в том, что я не получаю Scala Future
, когда я звоню producer.send
, это Java Future
. Я не знаю, как работает Java Futures, и я бы предпочел пропустить это обучение. На этот раз это Future, но я имею в виду Java в целом.
Поэтому мне интересно, есть ли полный API Scala для работы с Kafka. Обычно так и должно быть, поскольку Kafka написана на Scala.
@aran: Scala - более простой язык, чем Java. В нем меньше угловых случаев и особых случаев. Кроме того, есть система типов Java, которую, по словам Мартина Одерски, понимают только 3 человека, … и он должен знать, так как он разработал большую ее часть! (На самом деле, по тону письма у меня сложилось впечатление, что он не причисляет себя к этим трем людям, несмотря на то, что он разработал большую часть системы типов Java.) Для сравнения: Спецификация языка Scala меньше, чем 150 страниц, включая журнал изменений и некоторые основные библиотеки. JLS составляет 750 страниц без библиотек.
@aran, я знаю, что использование пакетов Java (так что Java) неизбежно. Я просто сказал, что, поскольку я все равно пишу код на Scala, я надеюсь, что есть API Scala, поэтому мне не придется тратить все время на интеграцию кода Java в код Scala, как в вашей ссылке. Я думаю, что мое беспокойство имеет смысл, но, основываясь на отзывах, я думаю, что API Scala отсутствует. Спасибо, в любом случае.
причиной моего комментария является глубокий (как вы говорите, неизбежный) союз между java и scala. Например, я считаю, что параллельный пакет scala на самом деле является тегом для пакета java. Но я считаю ваш вопрос обоснованным, поэтому перебалансировал голоса.
Ok. Дело не только в том, что я не знаю будущего java, а в том, что я предпочитаю будущее Scala. Было бы здорово иметь версию producer.send
, которая возвращает его.
Наконец, я попробую RabbitMQ, там есть хорошая поддержка и примеры для Scala/Akka, это единственная причина.
Вы смотрели в потоки Кафки? Для этого есть Scala DSL!
Да, я знаю, это должно охватывать все, что действительно нужно сделать.
От Кафка заметные изменения в 2.0.0
The Scala consumers, which have been deprecated since 0.11.0.0, have been removed. The Java consumer has been the recommended option since 0.10.0.0. Note that the Scala consumers in 1.1.0 (and older) will continue to work even if the brokers are upgraded to 2.0.0.
The Scala producers, which have been deprecated since 0.10.0.0, have been removed. The Java producer has been the recommended option since 0.9.0.0. Note that the behaviour of the default partitioner in the Java producer differs from the default partitioner in the Scala producers. Users migrating should consider configuring a custom partitioner that retains the previous behaviour. Note that the Scala producers in 1.1.0 (and older) will continue to work even if the brokers are upgraded to 2.0.0.
пропустить кривую обучения Java, пока программирование в scala немного иронично :). Посмотрите здесь stackoverflow.com/questions/35033290/…