Kafka随机访问日志

时间:2019-04-12 02:21:02

标签: apache-kafka

我正在尝试通过使用KafkaConsumer.assign(partition),KafkaConsumer.seek(partition,offset)实现一种从Kafka随机访问消息的方法。 然后阅读民意调查中的一条消息。

但是在这种情况下,我每秒无法收到500条消息。相比之下,如果我“订阅”该分区,我将获得100,000+ msg / sec。 (@ 1000字节的味精大小)

我尝试过:

  1. 同一主机上和不同主机上的代理,动物园管理员,消费者。 (不使用复制)
  2. 1个分区和15个分区
  3. “ server.properties”中的默认线程配置已增加到20(io和网络)
  4. 单个使用者每次分配一个不同的分区,每个分区一个使用者
  5. 要消耗一个线程,要消耗多个线程(调用多个不同的使用者)
  6. 在两个代理上添加两个代理和一个新主题及其分区
  7. 启动多个Kafka使用者流程
  8. 更改邮件大小5k,50k,100k-

在所有情况下,我得到的最小值均为〜200 msg / sec。如果我使用2-3个线程,则最大为500。但是,执行上述操作会使“ .poll()”调用的时间越来越长(从单线程的3-4毫秒开始到10个线程的40-50毫秒开始)。

我幼稚的kafka理解是,消费者打开与代理的连接,并发送请求以检索其日志的一小部分。尽管所有这些都涉及延迟,并且检索一批消息会更好一些-我想这会随着所涉及的接收方数量而扩展,但同时会增加运行使用者和虚拟机的VM上的服务器使用率运行代理的VM。但是他们两个都在空转。

因此,显然在经纪人方面发生了一些同步,但是我不知道这是由于我使用Kafka还是使用.seek的某些固有限制

我会暗示我是否应该尝试其他尝试,或者这就是我所能获得的全部。

1 个答案:

答案 0 :(得分:2)

Kafka是设计上的流媒体平台。这意味着已经开发了许多用于加速顺序访问的东西。 Storing messages in batches只是一件事。当您使用poll()时,您会以这种方式利用Kafka,而Kafka会尽力而为。 随机访问是针对 Kafka没有设计的

如果您想快速随机访问分布式大数据,则需要其他功能。例如,分布式数据库(如Cassandra)或内存系统(如Hazelcast)。
另外,您可能想要transform Kafka stream到另一个可以使用顺序方式的方式。