scala写生产者
//创建配置的对象
val prop = new Properties()
//连接kafka端口
prop.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.30.151:9092")
//序列化
prop.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG,classOf[StringSerializer].getName)
prop.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG,classOf[StringSerializer].getName)
//ACK应答机制
prop.put(ProducerConfig.ACKS_CONFIG,"1")
//创建kafka生产端对象
val producer = new KafkaProducer[String, String](prop)
//开启多线程写入
for (i <- 1 to 5){
new Thread(new Runnable {
override def run(): Unit =
for (j <- 1 to 100000){
val record = new ProducerRecord[String, String]("test3",Thread.currentThread().getName+" "+j)
producer.send(record)
Thread.sleep(1)
println(Thread.currentThread().getName+" "+j)
}
}).start()
}
scala写消费者
//创建配置对象
val prop = new Properties()
//连接Kafka消费者
prop.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG,"192.168.30.151:9092")
//Kv反序列化 prop.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG,classOf[StringDeserializer].getName)
prop.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG,classOf[StringDeserializer].getName)
//自动提交
prop.put(ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG,"true")
prop.put(ConsumerConfig.AUTO_COMMIT_INTERVAL_MS_CONFIG,"200")
//使用earliest的提交方式,没消费过的话从头开始,消费过的话从offset开始
prop.put(ConsumerConfig.AUTO_OFFSET_RESET_CONFIG,"earliest")
//消费者组的名字
prop.put(ConsumerConfig.GROUP_ID_CONFIG,"s1")
//创建消费者对象
val consumer = new KafkaConsumer[String, String](prop)
consumer.subscribe(java.util.Arrays.asList("test3"))
while (true){
val cs: ConsumerRecords[String, String] = consumer.poll(Duration.ofMillis(100))
val iter = cs.iterator()
while (iter.hasNext){
val value = iter.next()
println(value.offset()+" "+value.value())
}
}