分区和流之间的Apache Kafka关系

时间:2015-07-17 13:29:27

标签: apache-kafka

  1. 主题分区与可以使用Java API创建的流之间的关系是什么?

  2. 拥有像

    这样的API背后的理由是什么?
     Map<String, List<KafkaStream<byte[], byte[]>>>  consumerMap = _consumerConnector.createMessageStreams(topicVsPartitionCountMap);
    

    而不是像

    那样简单
    List<KafkaStream<byte[], byte[]>> consumerStreams = _consumerConnector.createMessageStreams(partitionCountForTopic);
    

1 个答案:

答案 0 :(得分:1)

  1. 它实际上并不是topicName到partitionCount的映射,而是 到您想要的流数量。每个流提供一个 无限的迭代器,因此按预期用途消耗一个线程 (你总是可以在一个线程上组合两个,但你也可以 创建更少的流开始)。

    与分区的关系始终是一个分区 为同一个流提供数据。因此,在那之内 流/线程提供相同的排序保证 在你的kafka分区中建模。所以,如果事件A发生在之前 分区X中的事件B,以及分区X和分区Y都是流 为了流1,那么事件A保证在之前被处理 事件B,如果按顺序处理流1。

  2. 我认为这只是他们选择的设计决策(它们基本相同,你可以实现两者相同)。我能想到的唯一另一件事就是每次拨打createMessageStreams的电话都会触及 ZooKeeper和Kafka无论设置了多少流 您获取的流,因此您的开销较少 在同一个调用中获取多个。