kafka文档(2)----kafka API(java版本)

原文地址: http://kafka.apache.org/documentation.html#api


    当前正在重写kafka的JVM客户端。kafka  0.8.2包含的java  producer就是重写的。 下一个release版本将会包行重写的java  consumer。这些新的的客户端将取代现存的Scala客户端,但是为了兼容性,它们仍将存在一段时间。可以通过一些单独的jar包调用这些客户端,这些包的依赖性都比较小,同时老的Scala客户端仍会存在。



一、Producer   API

  在0.8.2 release版本中,我们鼓励所有新开发都使用新的java  producer。这个客户端是经过测试的,并且一般情况下会比先前的Scala客户端要更快而且具有更多的特征。你可以通过添加对客户端jar包的依赖来调用这个客户端,如下所示,使用maven配置:

    

        <dependency>
	    <groupId>org.apache.kafka</groupId>
	    <artifactId>kafka-clients</artifactId>
	    <version>0.8.2.0</version>
	</dependency>
可以通过javadoc文件查看如何使用producer。

二、High  Level Consumer  API
class   Consumer{
  /**
   *  Create a ConsumerConnector:创建consumer connector
   *
   *  @param config at the minimum, need to specify the groupid of the consumer and the zookeeper connection string zookeeper.connect.config参数作用:需要置顶consumer的groupid以及zookeeper连接字符串zookeeper.connect
   */

    public static kafka.javaapi.consumer.ConsumerConnector  createJavaConsumerConnector(ConsumerConfig  config);
  }

  /**
   *  V: type of the message: 消息类型
   *  K: type of the optional key assciated with the message: 消息携带的可选关键字类型
   */
   public interface kafka.javaapi.consumer.ConsumerConnector {
     /**
      *  Create a list of message streams of type T for each topic.:为每个topic创建T类型的消息流的列表
      * 
      *  @param topicCountMap a map of (topic, #streams) pair   : topic与streams的键值对
      *  @param decoder a decoder that converts from Message to T  : 转换Message到T的解码器
      *  @return  a map of (topic, list of KafakStream) pairs.   : topic与KafkaStream列表的键值对
      *           The number of items in the list is #streams . Each stream supports
      *           an iterator over message/metadata pairs .:列表中项目的数量是#streams。每个stream都支持基于message/metadata 对的迭代器
      */
      public <K,V> Map<String, List<KafkaStream<K,V> > >
        createMessageStreams( Map<String, Integer> topicCountMap, Decoder<K> keyDecoder, Decoder<V> valueDecoder);



    /**
     *  Create a list of message streams of type T for each topic, using the default decoder.为每个topic创建T类型的消息列表。使用默认解码器
     */
     public Map<String, List<KafkaStream<byte[], byte[]>>> createMessageStreams(Map<String, Integer> topicCountMap);

    /**
   *  Create a list of message streams for topics matching a wildcard.为匹配wildcard的topics创建消息流的列表
   *
   *  @param topicFilter a TopicFilter that specifies which topics to
   *                    subscribe to (encapsulates a whitelist or a blacklist).指定将要订阅的topics的TopicFilter(封装了whitelist或者黑名单)
   *  @param numStreams the number of message streams to return.将要返回的流的数量
   *  @param keyDecoder a decoder that decodes the message key  可以解码关键字key的解码器
   *  @param valueDecoder a decoder that decodes the message itself  可以解码消息本身的解码器
   *  @return a list of KafkaStream. Each stream supports an
   *          iterator over its MessageAndMetadata elements.  返回KafkaStream的列表。每个流都支持基于MessagesAndMetadata 元素的迭代器。
   */
 public <K,V> List<KafkaStream<K,V>>
    createMessageStreamsByFilter(TopicFilter topicFilter, int numStreams, Decoder<K> keyDecoder, Decoder<V> valueDecoder);

    /**
   *  Create a list of message streams for topics matching a wildcard, using the default decoder.使用默认解码器,为匹配wildcard的topics创建消息流列表
   */
  public List<KafkaStream<byte[], byte[]>> createMessageStreamsByFilter(TopicFilter topicFilter, int numStreams);


  /**
   *  Create a list of message streams for topics matching a wildcard, using the default decoder, with one stream.使用默认解码器,为匹配wildcard的topics创建消息流列表
   */
  public List<KafkaStream<byte[], byte[]>> createMessageStreamsByFilter(TopicFilter topicFilter);


  /**
   *  Commit the offsets of all topic/partitions connected by this connector.通过connector提交所有topic/partitions的offsets
   */
  public void commitOffsets();


  /**
   *  Shut down the connector: 关闭connector
   */
  public void shutdown();
}

     
你可以根据 这个例子学习怎样使用high level consumer api。


三、简单的 Consumer  API

class kafka.javaapi.consumer.SimpleConsumer {
  /**
   *  Fetch a set of messages from a topic.从topis抓取消息序列
   *
   *  @param request specifies the topic name, topic partition, starting byte offset, maximum bytes to be fetched.指定topic 名字,topic partition,开始的字节offset,抓取的最大字节数
   *  @return a set of fetched messages
   */
  public FetchResponse fetch(kafka.javaapi.FetchRequest request);


  /**
   *  Fetch metadata for a sequence of topics.抓取一系列topics的metadata
   *
   *  @param request specifies the versionId, clientId, sequence of topics.指定versionId,clientId,topics
   *  @return metadata for each topic in the request.返回此要求中每个topic的元素据
   */
  public kafka.javaapi.TopicMetadataResponse send(kafka.javaapi.TopicMetadataRequest request);


  /**
   *  Get a list of valid offsets (up to maxSize) before the given time.在给定的时间内返回正确偏移的列表
   *
   *  @param request a [[kafka.javaapi.OffsetRequest]] object. 
   *  @return a [[kafka.javaapi.OffsetResponse]] object.
   */
  public kafak.javaapi.OffsetResponse getOffsetsBefore(OffsetRequest request);


  /**
   * Close the SimpleConsumer.关闭
   */
  public void close();
}

对大多数应用来说, high  level consumer  Api已经足够了,一些应用要求的一些特征还没有出现high level consumer接口(例如,当重启consumer时,设置初始offset)。他们可以使用low level SimpleConsumer  Api。逻辑可能会有些复杂,你可以根据这个例子学习一下。

四、Kafka  Hadoop Consumer API
    为了在Hadoop中聚合以及加载数据提供边界可扩展的解决方式,是我们基本用例之一。 为了支持这种用例,我们提供Hadoop-based的consumer,他能够产生大量map tasks用来并行的从kafka集群中获取数据。这就提供了Hadoop数据加载能力,同时Hadoop是极其迅速的获取数据为基础的。这就使我们仅通过可操纵的Kafka servers就完全获取了网络操作。

有关Hadoop consumer的更多信息可以查看这里
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值