KafkaProducer(0.9):单个制作人多个主题。潜在问题?

时间:2017-08-07 15:26:00

标签: apache-kafka kafka-producer-api

我们目前每个主题使用一个制作人。出于显而易见的原因,我们正在考虑为多个主题切换到一个制作人。

现在,是否存在某个主题由于某种原因可能较慢而不是其他主题的情况?如果有这样的情况,它会如何与单个制作人产生多个主题?它会影响其他主题的吞吐量吗?

是否还有其他情况,将单个制作人用于多个主题可能不是一个好主意?

谢谢!

更新: 以下是我们迄今为止所尝试的内容:

我们简要地查看了代码,这是我们理解的内容: Kafka服务器为每个主题分区接受一批消息。 Map [TopicAndPartition,MessageSet]

它尝试在配置的超时内处理整个批处理,并发回包含成功和失败记录的响应。

现在让我们看一下主题级别可能出现的问题,以及这将如何影响整个批次:

1)并非所有主题的副本都可用: 假设批处理包含三个主题的数据:test1,test2,test3。 对于test3,并非所有副本都可用。领导者将立即检测到这种情况,并且记录将失败。在这种情况下,批处理不会延迟,test1和test2的吞吐量不会受到影响。

2)主题的副本很慢。 假设只有test3的副本很慢。在这种情况下,复制test3的消息将花费时间,这反过来会延迟整个批处理,从而影响主题test1和test2的吞吐量。

还有什么可能出错?

谢谢!

1 个答案:

答案 0 :(得分:0)

我假设您的意思是从同一个应用程序中的多个生产者到单个生产者?

使用单个生产者不应该有缺点

  • 您与每个经纪人有一个连接(您的n *为n生产者)
  • 您将更有效地批量处理消息

可能有一些缺点,可以通过conf解决:

  • 如果您在代理端有配额控制代理吞吐量的配额,因为您将使用单个生产者生成更多数据,您可能会达到配额。
  • 您可能需要修改您的conf(这取决于您使用的客户端),因为您将生成更多数据 - 例如,在Java生成器上buffer.memory,如果您想批量处理最好,{{ 1}}和max.request.size。这取决于您的数据