- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
有一个微服务,它从外部接收一批消息并将它们推送到kafka。每条消息都是单独发送的,因此对于每批我有大约 1000 条消息,每条 100 字节。消息似乎在内部占用了更多空间,因为磁盘上可用空间的下降速度比我预期的要快得多。
我正在考虑更改生产者逻辑,它将所有批处理放入一条消息中的方式(然后消费者将自行拆分它们)。但是我没有找到任何关于许多小消息的空间或性能问题的信息,也没有找到任何关于大小和数量之间平衡的准则。而且我对 Kafka 的了解还不足以得出我自己的结论。
谢谢。
最佳答案
生产者
将自行批处理发往同一分区的消息,以避免不必要的调用。
生产者之所以能做到这一点,要归功于它的后台线程。在图中,您可以看到它如何在将 3 条消息发送到每个分区之前对其进行批处理。
如果您还在生产者端设置了压缩,它也会在将消息发送到金属丝。此属性也可以在代理端设置(因此消息由生产者未压缩发送,并由代理压缩)。
这取决于您的网络容量来决定您是喜欢较慢的生产者(因为压缩会减慢它)还是在线路上的更大负载。请注意,为大文件设置较大的压缩级别可能会对您的整体性能产生很大的影响。
无论如何,我相信大/小消息问题对消费者
方面的伤害更大;向 Kafka 发送消息既简单又快速(默认行为是异步的,因此 生产者
不会太忙)。但是在 consumer
端,您必须查看处理消息的方式:
在这里,您将消费与处理结合起来。这是最简单的方法:消费者设置自己的线程,读取 kafka 消息并处理它。然后继续循环。
在这里,您将消费和处理分离。 在大多数情况下,从 kafka 读取消息的速度会比处理消息所需的时间快。 这只是物理学。在这种方法中,一个消费者提供许多分担处理负载的独立工作线程。
有关此的更多信息 here ,就在 Constructors
区域上方。
我为什么要解释这个?好吧,如果您的消息太大,并且您选择了第一个选项,您的消费者可能不会在超时间隔内调用 poll()
,因此它将不断重新平衡。如果您的消息很大(并且需要一些时间来处理),最好选择实现第二个选项,因为消费者将继续自己的方式,调用 poll()
而不会陷入重新平衡。
如果消息太大太多,您可能不得不开始考虑可以将消息缓冲到内存中的不同结构。例如,Pools
、deques
、queues
是实现此目的的不同选项。
您还可以增加轮询超时间隔。这可能会隐藏你关于死消费者的信息,所以我真的不推荐它。
所以我的回答是:这基本上取决于:您的网络容量、所需的延迟时间和处理能力。如果您能够像处理小消息一样快地处理大消息,那么我就不会在意了。
也许如果您需要过滤和重新处理较旧的消息,我建议您对主题进行分区并发送较小的消息,但这只是一个用例。
关于performance - Kafka : is it better to have a lot of small messages or fewer, 但更大的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62778495/
我正在使用样式组件。我必须使用它来更改样式,因为我需要更改的内容嵌套在 Kendo React Grid 中,正如他们在文档中概述的那样:https://www.telerik.com/kendo-r
我使用 GCC 编译器在 C 中运行以下两个代码。 #include #include int main() { int i, j, k, l, step, count = 0;
我使用 GCC 编译器在 C 中运行以下两个代码。 #include #include int main() { int i, j, k, l, step, count = 0;
我有一个 ListView ,可以包含从 1 到 100 的项目,动态变化。但是,当我的项目较少时,我希望项目垂直居中显示 ListView 布局。默认情况下,Android 从顶部绘制项目。我附上了
有一个微服务,它从外部接收一批消息并将它们推送到kafka。每条消息都是单独发送的,因此对于每批我有大约 1000 条消息,每条 100 字节。消息似乎在内部占用了更多空间,因为磁盘上可用空间的下降速
我正在尝试为 React JS 项目进行身份验证,但出现以下错误: Rendered fewer hooks than expected. This may be caused by an accid
我想将我的项目 (https://softsmithy.svn.sourceforge.net/svnroot/softsmithy) 从 Subversion 迁移到 Mercurial。 我正在处
我正在使用 SQL Server(我相信是 2005 年)。 我有TableA有 2 列和 439 行(每行都是唯一的)。 +----------+ |ID | Name | +----------+
主题 我有一个文本框,用省略号 overflow hidden 的文本。只有一行是可见的。 我使用 text-overflow 和 white-space: nowrap 完成了这项工作。该元素具有固
我正在使用 Parallel.ForEach 在多个线程上工作,每次迭代都使用一个新的 EF5 DbContext,所有这些都包含在一个 TransactionScope 中,如下所示: using
给定以下组件,当我按下年龄选择器并将值更改为 15 时,我呈现了一个没有驾驶执照字段的表单,我收到错误: Uncaught Error: Rendered fewer hooks than expec
我有一个带有微调器的应用程序,其中包含很多项目和一张图像。 每次用户选择列表项时,都会执行一定数量(1 到 5)的渲染脚本来更改图像的像素。 做出大约 30 个选择后,应用程序因错误而崩溃。 这是堆栈
我的问题与 Postgres 的工作原理有关: 我有一张 table : CREATE TABLE A ( id SERIAL, name VARCHAR(32), type VA
我收到此警告:“您的配置主分区的可用空间少于 100 MB;为获得最佳效果,Apple 建议增加可用空间量。”。 Screenshot of XCode 我想知道什么是“主分区”,我该如何处理。 提前
我想根据给定行的 prob 指定的概率分布随机选择样本点。但是,当我调用np.random.choice时,我收到错误ValueError:p中非零条目少于大小。 size 到底是什么意思?我还看了i
我正在尝试在 ubuntu 中使用 Mysql workbench 生成 ER 图。 The database contains 755 Tables 错误信息 Too many objects ar
我正在尝试在 ubuntu 中使用 Mysql workbench 生成 ER 图。 The database contains 755 Tables 错误信息 Too many objects ar
我在 Playstore 上上传了一个具有不同架构的应用程序版本,现在我想用新版本上传我的应用程序但是得到了。 Error:You can't rollout this release because
我有一个 df有数十万行,我正在创建一个新的数据框,它只包含某些值组的行的最高分位数: quantiles = (df.groupby(['Person', 'Date'])['Value'].app
当我将最新版本的 native Android 应用程序上传到 Play 商店时,它首先给了我以下警告: Warning: Deactivation of this APK will result i
我是一名优秀的程序员,十分优秀!