Recently I needed to spawn threads to have several Kafka consumers listening from a list of topics. I tried to do this using foreach from a parallel collection but it did not work. In the end I just used a for comprehension to launch a Java Thread for each Kafka consumer. Bellow is a synthesis of the code I used:
import scala.annotation.tailrec
import scala.util.Random
val is: Seq[Int] = 1 to 100
@tailrec
def printToScreen(i: Int): Unit = {
println(i)
Thread.sleep(1000 * Random.nextInt(10))
printToScreen(i)
}
for (i: Int <- is) {
val thread: Thread = new Thread {
override def run {
printToScreen(i)
}
}
thread.start()
}
In the production code I have a list of Kafka consumers configurations and prinToScreen
generates a call back that I send to the Kafka consumer.
The code above lunches 100 Threads and prints its corresponding number in random intervals.