当前位置: 首页 > 知识库问答 >
问题:

提高Kafka Producer的性能

严天逸
2023-03-14

我们运行在apache kafka 0.10.0. x和Spring 3. x上,不能使用Spring kafka,因为它支持Spring框架版本4. x。

因此,我们使用原生的Kafka Producer API来生成消息

现在我关心的是我的制片人的表现。问题是我相信有人打电话给制片人。send是真正连接到Kafka broker,然后将消息放入缓冲区,然后尝试发送,然后可能会调用生产者中提供的回调方法。send()

现在,KafkaProducer文档表示,它使用一个缓冲区和另一个I/O线程来执行发送,并且应该适当地关闭它们,以避免资源泄漏。

据我所知,这意味着如果我每次调用producer时都会发送100条消息。send()它尝试连接到代理,这是一个昂贵的I/O操作。

如果我错了,你能纠正我的理解吗?或者建议更好地使用Kafka制作人?

共有3个答案

梁丘飞鸾
2023-03-14

在以下情况下,您需要配置批处理。尺寸,玲儿。太太

1) 如果唱片到达的速度超过Kafka制作人发送的速度。

2) 如果你在各自的主题中有大量的数据,这对你的Kafka制作人来说真的是一个负担。

3)如果你有瓶颈

batch.size = 16_384 * 4
 linger.ms 200
compression.type = "snappy"

props.put(ProducerConfig.BATCH_SIZE_CONFIG, 16_384 * 4);
    // Send with little bit buffering
    props.put(ProducerConfig.LINGER_MS_CONFIG, 200);    
  //Use Snappy compression for batch compression.
    props.put(ProducerConfig.COMPRESSION_TYPE_CONFIG, "snappy");

Kafka大区

性能调谐

Kafka表演

岳华灿
2023-03-14

你的理解部分正确。

正如@leshkin指出的,有一些配置参数可以调整KafkaProducer如何处理要发送的消息的缓冲。

然而,独立于缓冲策略,制作人将负责缓存与主题领袖代理的已建立连接。

事实上,您可以使用connections.max.idle.ms参数(默认为9分钟)调整生产者将保持这种连接的时间。

因此,为了回答您最初的问题,与代理建立连接的I/O成本仅在第一次调用send时发生,只要您有数据要发送,I/O成本就会随时间摊销。

蓝飞
2023-03-14

Kafka生产商的两个重要配置参数是“批量”。“大小”和“逗留”。小姐。所以你基本上有一个选择:你可以等到生产商的批次满了,或者生产商超时。

>

  • 一批。大小–这是Kafka Producer在发送前尝试批处理的消息数的上限–以字节为单位指定。

    徘徊ms–为了允许在同一批中累积更多消息,制作人在发送之前要等待多长时间。

    这取决于您的用例,但我建议您仔细查看这些参数。

  •  类似资料:
    • 我正在用docx4j做一些测试。我需要做的是将复杂的Word文档(2-3页的文本、表格、项目符号列表、图像)转换成XHTML。

    • 我在我的应用程序中创建了第二个DataSource。 我用HikariDataSource创建了它,因为它断开了连接,所以出现了问题。 现在它没有断开,但是很慢 我的配置如下: 爪哇: 有人能告诉我如何提高绩效吗。 它们是表的小查询,分页约为25条记录,需要4秒钟。 我观察到,查询一个select的200条记录需要46秒,而查询只需要2秒。 以前,它们是千分之一秒。 非常感谢。

    • 您可以通过优化您的计算机系统、After Effects、您的项目和您的工作流程来改进性能。此处提供的某些建议不是通过提高渲染速度而是通过降低其他操作(例如,打开项目)所需的时间来改进性能的。 注意:到目前为止,用来改进总体性能的最好方法是提前规划、针对您的工作流程和输出管道运行早期测试、并确认您所提供的内容是您的客户实际需要和预期的内容。(请参阅规划您的工作。) Lloyd Alvarez 在

    • 我有一个cron作业方法,它根据用户的特色故事构建用户的故事提要,跟踪类别并跟踪用户。 最终提要按正确顺序添加到以下数据库表中: 用户提要表: Uid 方法如下,包含注释<代码: 对于30名用户,上述方法需要约35秒才能完成<问:我如何改进代码和性能?

    • 问题内容: 优化SQLite是棘手的。C应用程序的大容量插入性能可以从每秒85次插入到每秒96,000次以上插入! 背景:我们正在将SQLite用作桌面应用程序的一部分。我们将大量配置数据存储在XML文件中,这些文件会被解析并加载到SQLite数据库中,以便在初始化应用程序时进行进一步处理。SQLite非常适合这种情况,因为它速度快,不需要专门的配置,并且数据库作为单个文件存储在磁盘上。 基本原理

    • 我有一个名为Emails的列族,我正在将邮件保存到这个CF中,编写5000封邮件需要100秒。 我使用的是i3处理器,8gb内存。我的数据中心有6个节点,复制因子=2。 我们存储在卡桑德拉中的数据大小会影响性能吗?影响写入性能的所有因素是什么,如何提高性能? 预先感谢..