我已将 PutSQL 处理器的并发任务增加到“10”。
此时它显示以下错误,但没有数据丢失。
failed to process due to org.apache.nifi.processor.exception.ProcessException: org.apache.commons.dbcp.SQLNestedException: Cannot get a connection, pool error Timeout waiting for idle object; rolling back session:
如果我删除了并发任务,那么它就可以正常工作,没有这些例外
当谷歌搜索这个异常时,我在下面的链接中找到了答案
当我尝试在 Web 应用程序中创建超过 250 个线程时,出现 Cannot get a connection, pool error Timeout waiting foridle object https://stackoverflow.com/questions/11734808/i-am-getting-cannot-get-a-connection-pool-error-timeout-waiting-for-idle-object
但我不知道如何在 NiFi putSQL 中避免这个问题。
谁能帮我解决这个问题?
当池管理器无法与等待的请求者建立可行的连接并且 maxWait 已过从而触发超时时,就会发生此异常。
原因有多种,但通常分为两大类:
- 数据库已关闭或无法访问。
- 连接池(最大活动设置为 100)没有连接。
nifi 中的 DBCPConnectionPool 控制器服务默认有 8 个最大连接,最大等待时间为 500 毫秒。当 PutSQL 处理器占用 DBCP 池中的 8 个连接并且请求第 9 个连接或超过最大连接限制时,它将抛出“无法获取连接”异常。
您可以尝试两件事来避免此异常:
- 您可以增加 DBCPConnectionPool 控制器中的“最大等待时间”
服务配置。
- 您可以增加“最大总连接数”限制
DBCPConnectionPool 控制器服务配置。
请找到下面的屏幕截图,您需要在其中进行更改。
它可能会解决您的问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)