тихие сбои при индексации вasticsearch - PullRequest
0 голосов
/ 28 ноября 2018

Я использую эластичный поиск 6.4.Мы индексируем около 100 миллионов документов с помощью загрузчика node-js, используя клиент 15.2.0.

Результаты странные, потому что после каждого индекса мы получаем разное количество документов.

Код создает пакет, и после того, как он достигнет определенного размера, он загружается в эластичный поиск с помощью API-интерфейса.Для большей производительности мы отключаем обновление.Если большая часть отклонена, мы ждем 20 секунд и попробуйте снова

Мы также проверили, что response.error имеет значение true / false, предполагая, что response.error = true означает, что сбоев нет.

Здесь код:

if (i % options.batchSize === 0) {
            var previous_start = new Date();
            //sleep.msleep(options.slowdown);

            async.waterfall([
                function (callback) {
                    client.bulk(
                        {
                            refresh: "false", //we do refresh only at the end
                            //requestTimeout: 200000,
                            body: batch
                        },
                        function (err, resp) { 
                            if (err) { 
                                console.log(err.message);
                                throw err;
                            } else if (resp.errors) {
                                console.log('Bulk is rejected... let\'s medidate');
                                // let's just wait and re-send the bulk request with increased
                                // timeout to be on the safe side
                                console.log("Waiting for 20 seconds");
                                sleep.msleep(20000); // -> this is blocking... time for elasticsearch to do whatever it does
                                // and be in a better mood to accept this bulk
                                client.bulk(
                                    {
                                        refresh: "false",
                                        //requestTimeout: 200000,
                                        body: batch
                                    },
                                    function (err, resp) { 
                                        if (err) { 
                                            console.log(err.message);
                                            throw err;
                                        } else if (resp.errors) {
                                            console.log(resp);

                                            throw resp;
                                            // alternative would be to block again and resend

                                        }
                                        console.log("bulk is finally ingested...");
                                        let theEnd = new Date();
                                        return callback(null, theEnd);
                                    });
                            } else {
                                let theEnd = new Date();
                                return callback(null, theEnd);
                            }
                        });
                },
                function(end, callback) {
                    let total_time = (end - start) / 1000;
                    let intermediate_time = (end - previous_start) / 1000;

                    indexed += options.batchSize;
                    console.log('Loaded %s records in %d s (%d record/s)', indexed, total_time, options.batchSize / intermediate_time);
                    return callback(null, total_time);
                }
            ],
            function (err, total_time) {
                if (err)
                    console.log(err);
            });

            batch = [];
            i = 0;
        }
    });

Похоже, у нас есть некоторые ошибки молчания.У кого-нибудь есть такая же проблема?Любое предложение?

Более того, когда я смотрю на вызов http://localhost:9200/_cat/indices?v, я получаю странные результаты в столбце docs.deleted, что означает этот столбец?

health status index    uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   index_name Cqc2ABpRRs23P1DKlgaKJQ   5   0   96450728          340     24.8gb         24.8gb

иногда это число изменяется при индексации, например:

 green  open   index_name WsJPPQLcTuuiw37Vv0lfhA   5   0   21958048         6594      6.6gb          6.6gb

(затем это число уменьшается)

Я не мог найти какое-либо объяснение по этому поводу ...любая помощь по этому поводу?

Заранее спасибо

1 Ответ

0 голосов
/ 28 ноября 2018

Вы создаете новый индекс или используете его каждый раз?

Для удаленных документов вы позволяете es генерировать _id или принудительно его вводить?

Какой у вас batchSize?

Для ускорения индексации вы также можете отключить реплику во время индексации (если у вас есть один из них). Настройки => NumberOfReplicas (0) index_buffer_size также может быть обновлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...