我正在尝试通过使用KafkaConsumer.assign(partition),KafkaConsumer.seek(partition,offset)实现一种从Kafka随机访问消息的方法。 然后阅读民意调查中的一条消息。
但是在这种情况下,我每秒无法收到500条消息。相比之下,如果我“订阅”该分区,我将获得100,000+ msg / sec。 (@ 1000字节的味精大小)
我尝试过:
在所有情况下,我得到的最小值均为〜200 msg / sec。如果我使用2-3个线程,则最大为500。但是,执行上述操作会使“ .poll()”调用的时间越来越长(从单线程的3-4毫秒开始到10个线程的40-50毫秒开始)。
我幼稚的kafka理解是,消费者打开与代理的连接,并发送请求以检索其日志的一小部分。尽管所有这些都涉及延迟,并且检索一批消息会更好一些-我想这会随着所涉及的接收方数量而扩展,但同时会增加运行使用者和虚拟机的VM上的服务器使用率运行代理的VM。但是他们两个都在空转。
因此,显然在经纪人方面发生了一些同步,但是我不知道这是由于我使用Kafka还是使用.seek的某些固有限制
我会暗示我是否应该尝试其他尝试,或者这就是我所能获得的全部。
答案 0 :(得分:2)
Kafka是设计上的流媒体平台。这意味着已经开发了许多用于加速顺序访问的东西。 Storing messages in batches只是一件事。当您使用poll()
时,您会以这种方式利用Kafka,而Kafka会尽力而为。 随机访问是针对 Kafka没有设计的。
如果您想快速随机访问分布式大数据,则需要其他功能。例如,分布式数据库(如Cassandra)或内存系统(如Hazelcast)。
另外,您可能想要transform Kafka stream到另一个可以使用顺序方式的方式。