【发布时间】:2016-02-04 03:37:49
【问题描述】:
我有 3 个分区:0、1、2。所以消息可以分为 0、1、2。
例如:
分区 0 中的 1 条消息:0
分区 1 中的 3 条消息:111
分区 2 中有 2 条消息:22
如何让消费者按照012x12x1x的顺序消费消息(x表示当时没有消息)。消费消息的顺序如下:012121。 我想在 C++ 和 Python 中都这样做。查看现有客户端,消息可以以循环方式生成,但不能以循环方式消费。
有什么想法吗?
Kafka 消费者配置中有 partition.assignment.strategy (http://kafka.apache.org/documentation.html#consumerconfigs)。我正在寻找一些实现此配置的工具(例如flume、spark、storm)来从kafka读取数据,重新排序,然后再次写入kafka。继续上面的例子。重新排序的消息如下所示: 012121 (012x12x1x)
更新
现在,我可以在 C++ Kafka 客户端 (https://github.com/edenhill/librdkafka) 中执行此操作。
for(int i = 0; i < 2; i++)
{
RdKafka::Message *msg = m_consumer->consume(m_topic, i, 1000);
// Do something about msg here...
}
输出:
Reading from 1=>4953---1---
Reading from 0=>46164---0---
Reading from 1=>4954---1---
Reading from 0=>46165---0---
Reading from 1=>4955---1---
Reading from 0=>46166---0---
Reading from 1=>4956---1---
Reading from 0=>46167---0---
Reading from 1=>4957---1---
Reading from 0=>46168---0---
【问题讨论】:
-
我的问题已重新编辑。谢谢。
标签: apache-kafka spark-streaming flume apache-storm round-robin