-
Notifications
You must be signed in to change notification settings - Fork 285
Open
Description
Java API client version
8.15.1
Java version
openjdk version "21.0.5" 2024-10-15 LTS
Elasticsearch Version
8.15.1
Problem description
Insert data in Elasticsearch.
Important parameters:
throughput = 50 records/s
bulk concurrent requests = 2
bulk max actions = 10
bulk max size = 90 (never triggers insertions)
BulkIngester
bulkIngester = BulkIngester.of(b -> b
.client(client)
.maxOperations(bulkMaxActions)
.maxConcurrentRequests(bulkConcurrentRequests)
.maxSize(bulkMaxSize * 1024L * 1024)
.listener(esBulkListener));BulkListener
public class EsBulkListener implements BulkListener<byte[]> {
private static final Logger LOG = LogManager.getLogger(EsBulkListener.class);
private AckCounter ackCounter;
private boolean acknowledgeRecords;
public EsBulkListener(boolean acknowledgeRecords) {
this.ackCounter = new AckCounter();
this.acknowledgeRecords = acknowledgeRecords;
}
@Override
public void beforeBulk(long executionId, BulkRequest request, List<byte[]> contexts) {
//LOG.info("BulkIngester Execution (" + executionId + ") - About to execute new bulk insert composed of " + request.operations().size() + " actions");
}
@Override
public void afterBulk(long executionId, BulkRequest request, List<byte[]> contexts, BulkResponse response) {
if (response.errors()) {
LOG.error("BulkIngester Bulk Response has failures: " + response.errors());
if (acknowledgeRecords) {
response.items().forEach(i -> {
if (i.error() != null) {
ackCounter.updateFailure(1L);
} else {
ackCounter.updateSuccess(1L);
}
});
}
} else {
//LOG.info("BulkIngester Execution (" + executionId + ") - Bulk insert composed of " + request.operations().size() +" actions, took " + response.took() + " ms");
if (acknowledgeRecords) {
ackCounter.updateSuccess(request.operations().size());
}
}
}
@Override
public void afterBulk(long executionId, BulkRequest request, List<byte[]> contexts, Throwable failure) {
LOG.error("BulkIngester (" + executionId + ") - Execution of bulk request failed: " + failure.getMessage());
if (acknowledgeRecords) {
ackCounter.updateFailure(request.operations().size());
}
}
AckCounter getAckCounter() {
return ackCounter;
}
}Insertion:
public void send(Object record) {
Map<String, Object> esValues = (Map<String, Object>)record;
String docId = (String) esValues.remove(DOC_ID);
bulkIngester.add(op -> op
.index(ind -> ind
.id(docId)
.index(indexName)
.document(esValues)));
}Set Elasticsearch master down to fail insertions in Elasticsearch.
You have errors: bulk request failed: Connection refused
Then fix Elasticsearch master to insert again.
Insertions are blocked.
If bulk concurrent requests = 1 there is no issue.
Note that same test does not fail with deprecated bulk processor
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels
Type
Fields
Give feedbackNo fields configured for issues without a type.