rabbitmq ChannelFullException发生500次后,Apache Flume卡住

2sbarzqh  于 2022-11-08  发布在  RabbitMQ
关注(0)|答案(1)|浏览(164)

我有rabbitmq源,文件通道和solr接收器的Flume配置。有时接收器变得很忙,文件通道被填满。当时文件通道抛出ChannelFullException。在抛出500个ChannelFullException后,Flume卡住,永远不会响应和恢复。我想了解,500的值从何而来?我如何改变它?500是严格的,因为当Flume卡住时,我会计算异常,每次我都会发现500个ChannelFullException日志行。

shyt4zoc

shyt4zoc1#

你正面临一个典型的生产者-消费者问题,其中一方的工作速度比另一方快,在你的情况下,有两种可能性(或两者的组合):

  • RabbitMQ发送消息的速度快于Flume的处理速度。
  • Solr无法以足够快的速度接收消息,因此它们仍卡在Flume中。

解决方案是减慢消息发送速度(即限制RabbitMQ)或调整Flume,使其能够更快地处理消息。我认为最后一件事是您想要的。此外,Flume无响应可能是由于Java堆大小已满所致。增加堆大小,然后重试,直到错误消失。


# Modify java maximum memory size

vi bin/flume-ng
JAVA_OPTS="-Xmx2048m"

此外,您还可以增加代理、通道的数量或这些通道的容量。这自然会导致java堆大小上的更大足迹,所以首先尝试一下。


# Example configuration

agent1.channels = ch1
agent1.channels.ch1.type = memory
agent1.channels.ch1.capacity = 10000
agent1.channels.ch1.transactionCapacity = 10000
agent1.channels.ch1.byteCapacityBufferPercentage = 20
agent1.channels.ch1.byteCapacity = 800000

我不知道确切的数字500是从哪里来的,一个大胆的猜测是,当有500个异常抛出时,java堆大小是满的,Flume没有响应。
另一种可能性是上面的默认配置导致它正好是500。因此,尝试调整它,以便如果它最终是不同的或更好的,它不会再发生。

相关问题