D. *_*nka 7 java performance load-balancing apache-kafka partition
我在卡夫卡遇到了负载均衡的问题.所以,我创建了一个包含10个分区的主题并创建了2个消费者.这10个分区被划分并分配给这些消费者(第一个分区为5个分区,第二个分区为5分区),并且工作正常.有时第一个消费者工作,有时第二.
但是,在某一时刻,我们可能面临一种情况,例如第二个消费者收到消息并且需要时间(例如10分钟)来处理此消息.
那么,我的问题是kafka将如何决定将消息存储在哪个分区中?
在这种情况下循环我认为不是一个好主意,因为在第二个消费者完成长时间工作之前,将不会处理由第二个消费者处理的分区中的消息.
更新!
根据@Milan Baran的回答,负载在生产者方面是平衡的.但是在这种情况下,即使我们提供自定义Partitioner
实现,在分配给分配给正在进行长期工作的消费者的分区中的消息也将是同样的问题,直到此消费者完成为止它的长期工作.
可能是,其他地方还有额外的负载均衡器?
应该使用哪个分区的决定不是由 kafka 决定的,而是由发送消息的生产者决定。看https://kafka.apache.org/documentation#producerconfigs
您可以提供一个分区程序类来决定选择哪个分区。
partitioner.class
实现 Partitioner 接口的 Partitioner 类。 org.apache.kafka.clients.producer.internals.DefaultPartitioner
有对 DefaultPartitioner 策略的描述
/**
* The default partitioning strategy:
* <ul>
* <li>If a partition is specified in the record, use it
* <li>If no partition is specified but a key is present choose a partition based on a hash of the key
* <li>If no partition or key is present choose a partition in a round-robin fashion
*/
Run Code Online (Sandbox Code Playgroud)
谢谢大家的帮助。但我找到了我的问题的答案。那么首先kafka至少有3个地方均衡负载:
partition.assignment.strategy
属性来配置。默认情况下使用范围。partitioner.class
归档时间: |
|
查看次数: |
3758 次 |
最近记录: |