Kafka High Level Consumer API in Scala

本文目的


研究了一下Kafka Produce/Consumer 的API,发现Consumer API的使用并没有那么的straight forward。折腾了2天后,终于摸到了一些门道,这里记录下怎样使用High Level Consumer API来接收并处理一个Topic中的消息。

本文的例子用Scala编写,如果要改成Java的其实很容易。


环境


Kafka为0.8.2.0(CDH版本)
Scala为2.10.4

Kafka中事先创建了一个名为my-2nd-topic的Topic,该Topic由2个partition构成,如下:

这里写图片描述

我们将向该topic中写入一些消息,生成消息的代码如下:

object ProduceKeyedMsg {
    def BROKER_LIST = "ecs1:9092,ecs2:9092"
    def TOPIC = "my-2nd-topic"

    def main(args: Array[String]): Unit = {
        println("开始产生消息!")

        val props = new Properties()
        props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, BROKER_LIST)
        props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, classOf[StringSerializer].getName)
        props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, classOf[StringSerializer].getName)

        val producer = new KafkaProducer[String, String](props)

        for (i <- 0 to 10) {
            val ret: Future[RecordMetadata] = producer.send(new ProducerRecord(TOPIC, "key-" + i, "msg-" + i))
            val metadata = ret.get  // 打印出 metadata
            println("i=" + i + ",  offset=" + metadata.offset() + ",  partition=" + metadata.partition())
        }

        producer.close
    }
}


Consumer API


Consumer的预期行为:开启两个线程,去并行地读取Topic中的消息。(Consumer的两个线程正好对应着Topic的两个partition)

先给出代码,然后再给分析。

package cn.gridx.kafka.apis.scala.consumer

import java.util.Properties

import kafka.consumer.{ConsumerIterator, KafkaStream, Consum
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值