我有一个Kafka Streams应用程序,它从很少的主题中获取数据,并将数据连接到另一个主题中。
Kafka配置:
5 kafka brokers
Kafka Topics - 15 partitions and 3 replication factor.
注意:我在运行Kafka代理的同一台机器上运行Kafka Streams应用程序。
每小时消耗/产生数百万条记录。每当我让任何Kafka经纪人下岗时,都会进入重新平衡阶段,重新平衡大约需要30分钟,有时甚至更长时间,很多时候,这会扼杀许多Kafka流程。
回答标题中的问题:
来自Spark/HDFS背景,我认为这是一种思维的改变,因为您习惯于认为在数据所在的地方进行处理是好的,可以利用数据的局部性。在这里,代理将提供数据位置,但必须将数据发送到Kafka Streams集群进行处理(失去了一些好处)。但是,将它们分开可以让您分别管理两个集群。
如果您想到运行高延迟处理作业、共享数据处理的群集(例如HDFS YARN群集),您可以获得“数据所在的进程”,而不是相反。您可以为数据处理分配资源——但想法是,您的处理不依赖于临时数据峰值(就像流一样),而是依赖于总数据量。如果你的数据增长,你的计算将花费更多,你可以分配更多的资源,但它们会同时增长。然而,在流媒体应用程序上,必要的处理能力确实取决于数据峰值(以及您的低延迟要求),而不是总数据量,因此存储和处理的尺寸和管理分开是有意义的,因为它们的弹性需求不是基于相同的维度。
这与一个明显的事实不同,即在同一个节点中同时拥有数据处理(Kafka代理)和数据处理(Kafka Streams)会给节点带来更多的负载,但是我们假设在定义节点尺寸时已经考虑到了这一点。
从技术上讲,可以在与代理相同的服务器上运行Kafka Streams应用程序。但不推荐。两者都需要共享相同的资源,你最终会有一个争论。
每当我让Kafka经纪人破产,它就会进入再平衡
不知道为什么会这样。您使用的是什么版本的Kafka或Streams API?如果您使用的是代理0.10.1,我强烈建议将您的Streams应用程序升级到0.11(注意,您可以在没有代理升级的情况下这样做)。
根据您正在分阶段处理的问题的详细信息,StandbyTask
可能有助于长时间的重新平衡。您可以简单地配置参数num.standby。replica=1可启用备用任务
s。
问题内容: 我刚刚发现我可以使用Python编写一个非常简单的Web服务器。我已经有一个Apache Web服务器,我想在这台机器上尝试基于Python的Web服务器。但是,如果尝试尝试,可能会引起某种冲突。我的意思是两个Web服务器将如何“决定”谁需要服务器处理来自客户端的请求? 问题答案: 让他们监听不同的端口,您会没事的。 默认的Web端口是80。当您在浏览器中打开某些网址而不指定端口时,默
我的应用程序在emulator上运行得很好,但当我导出后在我的智能手机(galaxy s3)上运行它时,它会在这个活动中崩溃,因为有HTTP连接!问题出在哪里?代码还是导出?当我点击连接按钮时,它崩溃了。
问题内容: 假设我在同一台计算机上同时运行两个Java程序。这些程序将在单个JVM实例中运行还是在两个不同的JVM实例中运行? 问题答案: 如果您使用命令(从命令行)开始每个命令,它们将作为完全独立的JVM运行。 “程序”可以作为在一个JVM中运行的单独线程启动。
问题内容: 每个Java应用程序都将在特定的Java虚拟机实例中运行。我真的在以下方面感到困惑,而Google搜索使我更加困惑。不同网站上的不同文章。 如果我有一个用Java编写的Web服务,它将需要一个JVM实例来运行,那么JVM可以成为守护进程吗? 如果是,当我们运行任何其他Java应用程序时,它将使用该JVM实例还是创建一个新的JVM? 任何机器上可用的主内存是恒定的。当我们同时启动n个Ja
我试图在不同的机器上运行kafka streams应用程序的多个实例,但出现以下错误: 无法锁定全局状态目录。如果多个KafkaStreams实例使用同一状态目录在同一主机上运行,则可能会发生这种情况。kstream-test-prod-6f9bc47d9c-bmq2z:org.apache.kafka.streams.errors。锁定异常:无法锁定全局状态目录:/tmp/kafka-strea