问题标签 [kahadb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
3498 浏览

java - 用于持久消息的 kaha db 消息存储

我知道 db-xx.log 是日志文件,而 db.redo 是参考文件?

db-xx.log 存储尚未使用的消息。这些消息在被消费后将从 db-xx.log 中删除。db.redo 按消息 ID 存储消息的引用(存储在 db-xx.log 中)。

  1. 但是,什么是 db.data 和 db.free?
  2. 它们的功能是什么?

我的理解是代理首先将消息存储在缓存(易失性内存)中,然后在检查点或缓存大小已满时将这些消息移动(附加)到 db-xx.log 中。

  1. 那是对的吗?

谢谢

0 投票
1 回答
1648 浏览

activemq - 如何从完整的 KahaDb 持久存储中恢复 ActiveMQ?

使用 AMQ 5.9 我遇到了一个网络问题,导致队列中的消息备份。我开始收到日志消息

"Usage (default:store:queue://myqueue:store) percentUsage=101% usage=6254005794, limit=6144430090, ...Stopping producer...to prevent flooding queue..)

我无法恢复并再次开始使用消息。

我尝试进入 activemq.xml 以增加我的最大存储使用量:

我还尝试关闭流量控制

但我仍然收到相同的错误消息。

我有磁盘空间。命令行上没有设置被覆盖。如何恢复并处理我的消息?

0 投票
2 回答
11519 浏览

java - ActiveMQ - 加载失败:类路径资源 [activemq.xml]

在使用“MySQL”(http://activemq.apache.org/jdbc-support.html)实现持久性之后

我发现下一个问题:


文件配置:--> activemq.xml



文件:--> activemq.log



你能帮我解决这个问题吗?

0 投票
2 回答
2238 浏览

java - ActiveMQ检查点调用后如何避免阻塞队列浏览

将 ActiveMQ 与大量持久性队列 (250) á 1000 个持久性 TextMessages á 10 KB 一起使用时会出现问题。

一个场景需要这些消息在存储中保留很长时间(几天),直到它们被消耗掉(大量数据被分阶段分发给许多消费者,可能会离线几天)。

在 Persistence Store 充满这些消息之后,并且在代理重新启动后,我们可以浏览/使用一些队列 ,直到30 秒后调用 #checkpoint。

此调用导致代理使用所有可用内存,并且永远不会将其释放用于其他任务,例如队列浏览/消费。在内部,MessageCursor 似乎决定没有足够的内存并停止将队列内容传递给浏览器/消费者。

=> 有没有办法通过配置来避免这种行为,或者这是一个错误?

期望是,我们可以在任何情况下使用/浏览任何队列。

下面的设置已经投入生产一段时间了,ActiveMQ 文档中应用了一些建议(目标策略、systemUsage、持久性存储选项等)

  • 使用 ActiveMQ 测试行为:5.11.2、5.13.0 和 5.5.1。
  • 内存设置:Xmx=1024m
  • 爪哇:1.8 或 1.7
  • 操作系统:Windows、MacOS、Linux
  • PersistenceAdapter:KahaDB 或 LevelDB
  • 光盘:足够的可用空间(200 GB)和物理内存(最大 16 GB)。

除了上述设置之外,我们还为代理使用以下设置(顺便说一句:将 memoryLimit 更改为较低的值,如 1mb 不会改变这种情况):

如果我们将 destinationPolicy 中的cursorMemoryHighWaterMark设置为更高的值,例如150600,具体取决于 memoryUsage 和可用堆空间之间的差异,可以稍微缓解这种情况,但在我看来,这对于生产系统来说并不是一个真正的选择看法。

带有来自 Oracle Mission Control 的信息的屏幕截图,显示了从未从内存中释放的那些 ActiveMQTextMessage 实例:

http://goo.gl/EjEixV

0 投票
0 回答
369 浏览

activemq - 主从集群中未获取文件锁定

我正在尝试使用共享文件系统在主从中配置 ActiveMQ(v.5.12.1)实例集群。

这些实例使用此配置在不同的服务器中运行

问题是两个实例都作为主实例启动,因为锁定文件机制似乎不起作用。

我在同一台服务器上对 2 个实例进行了测试,并且使用此配置,它按预期工作(第二个实例无法获取文件锁并作为从属等待)。

我们使用的是 NFSv4,挂载属性如下:

谢谢

0 投票
1 回答
534 浏览

activemq - 将数据从 Kahadb 迁移到 MKahadb

我正在从 KahaDB 更改为 MKahaDB。因此,将我的一些队列分配到不同的目的地。但我想将旧队列的数据迁移到新创建的目的地。有谁知道,我该怎么做?

0 投票
0 回答
642 浏览

activemq - ActiveMQ : KahaDB 和 LevelDB 磁盘空间扩展缓慢

有没有人观察到他们的 ActiveMQ KahaDB 或 LevelDB 存储的磁盘空间增长缓慢?

我们正在使用以下内容:

  • Windows Server 2008 SP1(用于部署)和 Windows 7 SP1(用于开发)
  • Java 1.7
  • ActiveMQ 5.11.1 和 5.13.2(尝试了 KahaDB 和 LevelDB)
  • ServiceMix 5.4.0,其 Karaf 服务器托管基于 Camel 的 Java 应用程序 bean,其 ActiveMQ 服务器未使用
  • 消息速率 = 每秒 200 条 XML 消息传入和大约相同的传出(由 Java 应用程序 bean 转换为 JSON)
  • 队列数 = 大约 50 个队列共享上述消息;特别是 2 个队列正在处理多达一半的流量
  • 所有消息设置为:
    • 交付持久性 = false
    • 生存时间 (TTL) = 1 或 2 分钟(最长)

卡哈数据库

将 ActiveMQ 与 KahaDB 一起使用时,我观察到 db*.log 文件最初是从 db-1.log 到 db-2.log,然后到 db-3.log 等等,以及较旧的 db* .log 文件按预期清理(删除)。然后在某个时间点可能是 10 小时后,旧的 db*.log 文件不再被清理;新的 db*.log 文件出现,KahaDB 开始以每天大约 4 GB 的速度扩展。当它最终达到我们配置的 50 GB 上限时,服务器当然会停止工作。

似乎一小部分消息未能过期(尽管被赋予了 TTL)并因此阻止了正常清理。我试图手动删除旧的 db*.log 文件,但我被阻止这样做,并警告这些文件仍在使用中。

KahaDB db*.log 文件在文本编辑器中是“半可读的”(!);即我可以识别应用程序消息,但这并不能告诉我真正发生了什么。

级别数据库

我最近尝试将 LevelDB 与 ActiveMQ 5.13.2 一起使用,尽管存储速度慢得多(每天大约 200 MB),但该存储似乎仍在扩展。

我相信 LevelDB 数据存储使用压缩;大多数文件似乎是二进制文件,因此在没有合适的阅读器/浏览器的情况下非常不透明。

有没有人找到或实现了一个工具来读取/浏览 KahaDB 或 LevelDB 消息存储的非持久消息?

我们的配置

下面是我们的activemq.xml通常的样子:

0 投票
1 回答
98 浏览

java - ActiveMQ 仅在必要时保留在磁盘上

我正在使用 Java 和 ActiveMQ 从 Embedded-Linux 发送消息。我的要求是,如果目标代理不可用,则应该保留消息。我选择 KahaDB 作为持久性适配器,以便消息在代理重新启动后仍然存在。

尽管我已将最大文件大小限制为 16MB,但我只想目标代理/消费者不可用时保留消息。这样做的原因是为了限制 CPU 和磁盘的使用。例如:产生消息1,尝试发送消息。如果不应该发生成功的持久性,因为我对重新发送已经发送的数据不感兴趣(或者应该只在内存中发生)。产生消息 2,3,4 但目标代理不可用,然后将消息保存在磁盘上,以便在不太可能的 borker 关闭时消息将继续存在。

在来回浏览 ActiveMQ 的文档后,我没有找到任何适合我的用例的答案,所以我问这个伟大的社区,我正在寻找的东西是否真的可行。

0 投票
3 回答
11881 浏览

activemq - ActiveMQ - Kahadb 日志文件不会清除

我的任务是调查为什么 db-*.log 文件没有被清除。

从我通过大量搜索发现的情况来看,一切都表明消息仍在队列中。我查看了所有已配置主题的队列中的 hawtio,队列大小为零。

据我了解,理论上 Enqueue 大小和 Dequeue 大小应该相同,但事实并非如此。似乎我的出列大小为 0。

我查看了这些主题,但没有清除它们的操作。

我希望能够清除所有消息,以便 kahadb 日志消失。

0 投票
0 回答
527 浏览

performance - 几天后 ActiveMQ 消费者速度变慢

我们是ActiveMQ具有所有默认设置的设置。它的经纪人网址就像failover:(tcp://host1,tcp://host2,tcp://host3)?randomize=false

我们有 2 个消息队列,生产者在其中发布持久消息。

消息通常具有稳定的流量,但当市场开放时,消息会持续近 2 个小时。此设置可以正常工作 2-3 天,然后消费者处理消息的速度变慢,我们看到队列增加。

消费者执行以下步骤:

  1. 转换消息。
  2. 处理它
  3. 添加到缓存和数据库。

Prefetch size是 1000。

以下是一些观察结果:

  1. 消费者处理似乎不是问题,否则它会一直放慢速度。
  2. 看起来 ActiveMQ 代理的处理速度变慢了,但我没有证据
  3. 我们观察到,在 3 台主机中,只有 1 台和 2 台主机处理大部分消息。

关于如何解释这种缓慢的任何想法?

编辑:

对此进一步分析,发现当消费者减速时, Kahadbstore [ Persistentmessage are stored in in broker] 达到 100% 存储。Kahadb我可以理解当存储达到 100% 时生产者会被阻止,但为什么消费者会放慢速度?是因为Kahadb在这段时间内可能会变慢并且提取相当于预取大小的消息需要更多时间吗?