两个elasticsearch jdbc河,索引数据计数不匹配数据库数据计数

时间:2014-02-22 02:56:19

标签: elasticsearch elasticsearch-jdbc-river

表agent_task_base有12000000行

curl -XPUT 'localhost:9200/river/myjdbc_river1/meta' -d '{
    "type" : "jdbc",
    "jdbc" : {
        "url" : "...",
        "user" : "...",
        "password" : "...",
        "sql" : "select * from agenttask_base where status=1",
        "index" : "my_jdbc_index1",
        "type" : "my_jdbc_type1"
    }
}'

curl -XPUT 'localhost:9200/river/myjdbc_river2/meta' -d '{
    "type" : "jdbc",
    "jdbc" : {
        "url" : "...",
        "user" : "...",
        "password" : "..",
        "sql" : "select * from agenttask_base where status=1",
        "index" : "my_jdbc_index2",
        "type" : "my_jdbc_type2"
    }
}'

两条河一起执行,但最终结果是

my_jdbc_index1 has 10000000+ rows

my_jdbc_index2 has 11000000+ rows

为什么????

2 个答案:

答案 0 :(得分:1)

在elasticsearch-jdbc-river(#143)的github上存在一个问题,它描述了如上所述的sam问题。尝试减少最大批量请求,并再次使用elasticsearch索引。

有关详细信息,请参阅:https://github.com/jprante/elasticsearch-river-jdbc/issues/143#issuecomment-29550301

我希望这会有所帮助

答案 1 :(得分:0)

我在经过多次试验和错误之后才想到这一点,因为我遇到了同样的问题

对我有用的是定义jdbc河流参数bulk_size和max_bulk_requests

curl -XPUT 'localhost:9200/river/myjdbc_river1/meta' -d '{
    "type" : "jdbc",
    "jdbc" : {
        "url" : "...",
        "user" : "...",
        "password" : "...",
        "sql" : "select * from agenttask_base where status=1",
        "index" : "my_jdbc_index1",
        "type" : "my_jdbc_type1",
        "bulk_size" : 160,
        "max_bulk_requests" : 5  
    }
}'

160的批量大小似乎是我的神奇数字,500的批量大小对于我的本地安装来说太高了,并且会返回关闭数据库连接的java.sql异常,但是我的Web服务器环境没问题

底线是您可以修改这些数字来调整性能,但通过设置它们,您应该看到您的索引doc数与您的sql结果数相匹配