apache kafka消息调度和均衡加载

pgky5nke  于 2021-06-08  发布在  Kafka
关注(0)|答案(1)|浏览(332)

我刚开始使用ApacheKafka,我真的想弄清楚,我该如何设计我的系统以正确的方式使用它。
我正在构建一个处理数据的系统,实际上我的数据块是一个需要处理的任务(对象)。对象知道如何处理它,所以这不是问题。
我的系统实际上分为3个主要组件:发布者(负责发布任务的代码)、传输(实际上是kafka)和一组使用者(实际上是从队列中提取数据并以某种方式处理数据的工作者)。需要注意的是,如果用户的任务需要两步计算(用户只需创建任务并将其发送回传输),那么用户本身就可以是发布者
所以我们可以从我的想法开始,我有3个服务器:1个单根发布服务器(kafka服务器也在那里运行)和2个实际处理任务的用户服务器。数据工作流是这样的:publisher创建任务,将它放到transposrt,然后一个使用者从队列中取出这个任务并处理它。如果每个消费者都能像其他消费者一样处理相同数量的任务,那就更好了(这样工作负载就可以在消费者之间均匀分布)。
在这种情况下,我需要使用哪种Kafka配置模式?kafka是否有一些消息平衡功能,或者我需要创建2个分区,每个使用者将只绑定到单个分区,并且只能使用来自这个分区的数据?

zaqlnxep

zaqlnxep1#

在Kafka中,许多分区大致可以转化为系统的并行性。
一般提示是为每个主题创建更多的分区(如10),并在创建使用者时指定与分区数对应的使用者线程数。
在创建使用者时,可以在高级使用者api中提供每个主题要创建的流(线程)的数量。假设您创建了10个分区,并从一台计算机上运行使用者进程,您可以将topiccount设为10。如果从2台服务器运行使用者进程,则可以将topiccount指定为5。
请参考此链接 The createMessageStreams call registers the consumer for the topic, which results in rebalancing the consumer/broker assignment. The API encourages creating many topic streams in a single call in order to minimize this rebalancing. 您还可以使用 kafka-add-partitions.sh Kafka/宾指挥。增加分区后,您可以使用增加的topiccount重新启动使用者进程
另外,在生成消息时,应该基于消息对象中的某个随机键使用keyedmessage类,以便消息均匀地分布在不同的分区中

相关问题