主题分区与可以使用Java API创建的流之间的关系是什么?
拥有像
这样的API背后的理由是什么? Map<String, List<KafkaStream<byte[], byte[]>>> consumerMap = _consumerConnector.createMessageStreams(topicVsPartitionCountMap);
而不是像
那样简单List<KafkaStream<byte[], byte[]>> consumerStreams = _consumerConnector.createMessageStreams(partitionCountForTopic);
答案 0 :(得分:1)
它实际上并不是topicName到partitionCount的映射,而是 到您想要的流数量。每个流提供一个 无限的迭代器,因此按预期用途消耗一个线程 (你总是可以在一个线程上组合两个,但你也可以 创建更少的流开始)。
与分区的关系始终是一个分区 为同一个流提供数据。因此,在那之内 流/线程提供相同的排序保证 在你的kafka分区中建模。所以,如果事件A发生在之前 分区X中的事件B,以及分区X和分区Y都是流 为了流1,那么事件A保证在之前被处理 事件B,如果按顺序处理流1。
createMessageStreams
的电话都会触及
ZooKeeper和Kafka无论设置了多少流
您获取的流,因此您的开销较少
在同一个调用中获取多个。