Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/344.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/apache-kafka/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 卡夫卡存储的信息比生成的多_Java_Apache Kafka - Fatal编程技术网

Java 卡夫卡存储的信息比生成的多

Java 卡夫卡存储的信息比生成的多,java,apache-kafka,Java,Apache Kafka,我有一个ApacheKafka 0.8集群,具有以下设置- 1) 3个代理都在同一台机器上运行 2) 一个主题包含10个分区和3个副本 我有20个制作人为一个主题制作 我有10个消费者从每个分区消费。 我正在测试代理的故障安全性 当所有代理都启动并运行时,消耗的消息数等于生成的消息数 然而,当我通过逐个关闭代理来测试设置时,我发现正在使用的消息数量多于生成的消息数量 可能的原因是什么?首先想到: 除非每个代理都有单独的磁盘,否则强烈建议为每个代理使用单独的计算机。这是因为每个磁盘都有代理想要利用

我有一个ApacheKafka 0.8集群,具有以下设置-

1) 3个代理都在同一台机器上运行
2) 一个主题包含10个分区和3个副本

我有20个制作人为一个主题制作
我有10个消费者从每个分区消费。 我正在测试代理的故障安全性

当所有代理都启动并运行时,消耗的消息数等于生成的消息数

然而,当我通过逐个关闭代理来测试设置时,我发现正在使用的消息数量多于生成的消息数量

可能的原因是什么?

首先想到:

除非每个代理都有单独的磁盘,否则强烈建议为每个代理使用单独的计算机。这是因为每个磁盘都有代理想要利用的最大I/O吞吐量,如果您有多个代理使用同一个磁盘,则所有代理都将竞争I/O

你能多快把经纪人搞垮?即时杀戮还是优雅关机?离下一个经纪人被杀还有多久?您的邮件确认级别是多少?您生成消息的速率是多少

如果您杀死一个代理的速度太慢,那么生产者可能已经向垂死的代理发送了一条消息,根据竞争条件,该代理可能已经复制了该消息,但它不会在生产者死亡之前向其发送确认。这将导致制作人认为消息没有成功复制,然后尝试将相同的消息发送给新的领导者。新的领导者会认为复制的消息是一条新消息,因此将其添加到日志中

这是一种竞争条件,除非在高生产率和确认级别-1下,否则不太可能出现这种情况。

首先想到:

除非每个代理都有单独的磁盘,否则强烈建议为每个代理使用单独的计算机。这是因为每个磁盘都有代理想要利用的最大I/O吞吐量,如果您有多个代理使用同一个磁盘,则所有代理都将竞争I/O

你能多快把经纪人搞垮?即时杀戮还是优雅关机?离下一个经纪人被杀还有多久?您的邮件确认级别是多少?您生成消息的速率是多少

如果您杀死一个代理的速度太慢,那么生产者可能已经向垂死的代理发送了一条消息,根据竞争条件,该代理可能已经复制了该消息,但它不会在生产者死亡之前向其发送确认。这将导致制作人认为消息没有成功复制,然后尝试将相同的消息发送给新的领导者。新的领导者会认为复制的消息是一条新消息,因此将其添加到日志中


这是一种竞争条件,除非在高生产率和-1级认可度的情况下,否则不太可能出现这种情况。

我在让卡夫卡经纪人复活时也经历过类似的行为。我从三个卡夫卡经纪人开始。然后暂停一个。
开始生成消息。取消暂停的代理的暂停。卡夫卡中的信息比产生的信息还要多。这是acks=-1的情况。当使用acks=1时,会丢失一些消息……我在使卡夫卡代理恢复活力时也经历了类似的行为。我从三个卡夫卡经纪人开始。然后暂停一个。
开始生成消息。取消暂停的代理的暂停。卡夫卡中的信息比产生的信息还要多。这是acks=-1的情况。使用acks=1时,缺少一些消息。。。