我有rabbitmq源,文件通道和solr接收器的Flume配置。有时接收器变得很忙,文件通道被填满。当时文件通道抛出ChannelFullException。在抛出500个ChannelFullException后,Flume卡住,永远不会响应和恢复。我想了解,500的值从何而来?我如何改变它?500是严格的,因为当Flume卡住时,我会计算异常,每次我都会发现500个ChannelFullException日志行。
shyt4zoc1#
你正面临一个典型的生产者-消费者问题,其中一方的工作速度比另一方快,在你的情况下,有两种可能性(或两者的组合):
解决方案是减慢消息发送速度(即限制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。因此,尝试调整它,以便如果它最终是不同的或更好的,它不会再发生。
1条答案
按热度按时间shyt4zoc1#
你正面临一个典型的生产者-消费者问题,其中一方的工作速度比另一方快,在你的情况下,有两种可能性(或两者的组合):
解决方案是减慢消息发送速度(即限制RabbitMQ)或调整Flume,使其能够更快地处理消息。我认为最后一件事是您想要的。此外,Flume无响应可能是由于Java堆大小已满所致。增加堆大小,然后重试,直到错误消失。
此外,您还可以增加代理、通道的数量或这些通道的容量。这自然会导致java堆大小上的更大足迹,所以首先尝试一下。
我不知道确切的数字500是从哪里来的,一个大胆的猜测是,当有500个异常抛出时,java堆大小是满的,Flume没有响应。
另一种可能性是上面的默认配置导致它正好是500。因此,尝试调整它,以便如果它最终是不同的或更好的,它不会再发生。