Kafka:分发进程和存储

Posted

技术标签:

【中文标题】Kafka:分发进程和存储【英文标题】:Kafka : distribute process and storage 【发布时间】:2017-04-05 15:07:33 【问题描述】:

我正在寻找一种使用 kafka 分发治疗的解决方案。 我必须对数百万个独立条目进行一些计算。 所以我在 3 个不同的虚拟机上安装了 3 个 kafka 代理,并开始使用 3 个不同的线程数据生成 3 个分区的主题。然后的想法是使用同一消费者组中的 3 个消费者使用这些分区,并将结果存储在另一个主题中以供其他进程使用。 可悲的是,它最终只将所有内容存储在一个分区上,因此只存储在一个 VM 上。我需要分发存储和处理...

是否可以以完全并行的方式为不同的主题生成数据? 如果我可以让 1 个生产者每 X 分钟向每个分区发送大致相同数量的数据,那就更好了。

我将 java kafka-clients 0.10.2.0 与 kafka_2.11-0.10.2.0 代理一起使用。

谢谢

【问题讨论】:

您的设置似乎正确,您怎么知道消息只通过一个分区?你也能告诉我们这个命令的结果吗:bin/kafka-topics.sh --describe --zookeeper ZOOKEEPER:2181 --topic TOPIC 我知道它只去了一个分区,因为 /tmp/kafka-logs/ 的大小只在一台计算机上增加,而在其他计算机上根本没有改变。这是命令的结果: Topic:Trajectoires PartitionCount:3 ReplicationFactor:1 Configs: Topic: Trajectoires Partition: 0 Leader: 2 Replicas: 2 Isr: 2 Topic: Trajectoires Partition: 1 Leader: 3 Replicas: 3 Isr: 3 Topic : Trajectoires Partition: 2 Leader: 2 Replicas: 2 Isr: 2 首先您可以看到您只使用了 2 个代理,因为领导者是 2 个或 3 个。如果您想达到您想要的效果,您应该为一个分区使用一个代理。 如何更新分区的leader?我想我是在其中一位经纪人倒闭时创建了我的主题,并且从那以后它没有改变 当我检查我刚刚创建的一个分区时,所有 3 个分区都有不同的领导者 【参考方案1】:

数据按键分区。因此,如果您的所有记录都具有相同的键,那么它们都将进入同一个分区。

您可以在生产者上明确指定要写入的分区,也可以使用null-keys,这将导致随机分布。

【讨论】:

以上是关于Kafka:分发进程和存储的主要内容,如果未能解决你的问题,请参考以下文章

kafka数据存储位置,附学习笔记+面试整理+进阶书籍

Kafka消费者-消费者进程和线程与主题分区的关系是啥

kafka 消息分发机制分区和副本机制

用Python多进程和paramiko给主机组批量分发命令和传送文件

Kafka:无法启动 Kafka - 进程无法访问文件 00000000000000000000.timeindex

linux kafka进程挂了 自动重启