【发布时间】:2019-07-19 01:05:48
【问题描述】:
我是使用 spring boot 的 kafka 新手,我在 projet 工作,我想使用 spring 将 kafka 集成到其中, 所以问题是我想从生产者向消费者发送消息,即使 kafka 服务器没有运行(离线模式)
谁能给我一个如何在离线模式下使用kafka的例子, 我找不到这个主题的教程 我想停止我的 kafka 服务器(例如),同时生产者想向主题发送数据,那么消费者可以得到这些消息吗? 最好的解决方案是什么?它们是真的吗?
*将数据发送到文件,当服务器返回运行时(例如我测试连接),我将数据从文件导出到主题
*将数据发送到数据库,当服务器返回运行(测试连接)时,我将消息(数据)从数据库发送到我的主题
*使用队列或列表来存储消息,当服务器返回运行(测试连接)时,我将数据从列表发送到主题,但问题是我有很多消息
-->如果有其他解决方案和一个简单的例子,谁能帮助我?
这是一个代理 Redis 的例子,我们测试 Redis 代理和生产者之间的连接,如果连接失败,我会将数据存储在一个 Queue 中,该队列可以存储许多消息,当 Redis 和 producer 之间的连接恢复工作时,producer 现在从 Queue 中获取这些消息并将它们发送到 Redis Brocker。
但是这个broker的问题,有一些消息丢失了 所以我们决定在我的项目中集成 kafka brocker 而不是 Redis brocker!
谁能给我举个例子,在 java 中如何在生产者将大量消息发送到 kafka 集群之前存储它们?或者因为我们不想使用相同的队列解决方案,所以这个问题的最佳解决方案是什么?
python 中的这个例子是如果连接到服务器失败,如何将消息存储在队列中:
try:
urllib.request.urlopen('http://serverAdress', timeout=0.1)
r.publish(topicProduction,json_background_of_message1)
print(json_background_of_message1)
arretControle=Tru
except Exception as e:
qArret.put(json_background_of_message1)
print("arret")
arretControle=True
//json_background_of_message1是一个Queue,如果连接失败,我们可以在这个Queue中存储很多消息,然后再发送这些消息
【问题讨论】:
-
Kafka 集群应该一直在运行。少数代理可以关闭,集群将正常工作(取决于复制因子)。没有像
using kafka in offline mode这样的东西。 -
例如,如果我的生产者想发送 1000 条消息,但在生产者发送 10 条消息后,我的远程 kafka 服务器突然停机(我的应用程序服务器突然停机)! ! 990 条消息(其余消息)发生了什么?是否有存储这些消息的解决方案,或者如果我的 kafka 服务器出现故障我该怎么办?
-
Kafka 作为集群运行,因此即使一个代理(远程 kafka 服务器)宕机,您也可以发送和消费消息。您必须正确设置复制因子。我建议您阅读 Kafka 文档 (kafka.apache.org/documentation)。真的很好。
-
在我工作的项目中,之前的开发者已经集成了Redis broker,他已经测试了redis和生产者之间的连接,如果有连接-> 我们可以将生产者消息发送到我们的代理redis,否则我们会将生产者发送的消息存储在队列中(在列表中),当连接回来时,生产者可以发送消息......但是有一个丢失的消息
-
感谢 wardziniak 为您提供帮助我做同样的事情还是什么?你明白我的意思吗?
标签: java spring-boot apache-kafka