Skip to main content

Aggregation based comparison in Watch condition and hard-coded variables

Watch: Compare Vs Script condition

If you need to do comparisons with aggregation buckets in watchers, then instead of this:
"condition": {
  "compare": {
    "ctx.payload.aggregations.agg1.buckets.0.doc_count": {
      "gte": 5
    }
  }
}

please prefer this, as this takes care of "Index out of bound" exceptions:
"condition": {
  "script": {
    "source": "return (ctx.payload.aggregations.agg1.buckets.size() > 0 && ctx.payload.aggregations.agg1.buckets.0.doc_count >= params.threshold)",
    "lang": "painless",
    "params": {
      "threshold": 5
    }
  }
}

Hard-coded variables in scripts

  • ElasticSearch throws circuit_breaking_exception error when it sees more than 15 new dynamic scripts within a minute.
  • Sometimes this error is also thrown when master goes down abruptly.
  • This is so because, it has to compile every new/unique script it sees and this is a CPU hog.
  • You can change the settings dynamically by setting
    script.max_compilations_rate
    to a larger value, whose default value is 15/minute.
  • It then caches the compiled script, but there is an upper limit of 100 or 65,535 bytes, whichever is lower. You can configure the size of this cache by using the
    script.cache.max_size setting
    and the size of stored scripts can be changed by setting
    script.max_size_in_bytes
    setting to increase that soft limit, but if scripts are really large then a native script engine should be considered.
  • By default, scripts do not have a time-based expiration, but you can change this behaviour by using the
    script.cache.expire
    setting.

Solution

  • For ElasticSearch, an script with threshold value of 5 is different to another script with threshold 10. But if we parameterize a changing variable, then it will be a single script compiled and kept in cache with parameters injected at run time.
  • Just to be clear, hard-coded variables are different than hard-coded constants. You don't need to parameterize hard-coded constants.

Comments

Popular posts from this blog

Procedure for name and date of birth change (Pune)

For change of name, the form (scribd) is available free of cost at Government Book Depot (Shaskiya Granthagar), which is located near Collector’s office, next to Saint Helena's School. The postal address is: Government Photozinco Press Premises and Book Depot, 5, Photozinco Press Road, Pune, MH, 411001. Wikimapia link Charges for name or date of birth change, in the Maharashtra Government Gazette: INR 120.00 per insertion (for two copies of the Gazette) For backward class applicants: INR 60.00 Charges for extra copy of the Gazette: INR 15.00 per copy (two copies are enough, so you may not want to pay extra for extra copies). Backward class applicants are required to submit a xerox of caste certificate of old name as issued by the Collector of the District concerned. Once the form is duly submitted, it normally takes 10 to 15 days for publication of advertisement in the Maharashtra Government Gazette. The Gazette copy reaches to the address filled in the form within nex...

Eclipse crashing and not starting

Problem: After restarting Eclipse, it crashes immediately and asks me to check C:\Users\username\Adobe Flash Builder 4.6\.metadata\.log In log it shows following error: !ENTRY org.eclipse.osgi 4 0 2013-02-13 11:53:46.760 !MESSAGE Application error !STACK 1 org.eclipse.swt.SWTError: Cannot initialize Drop     at org.eclipse.swt.dnd.DND.error(DND.java:266)     at org.eclipse.swt.dnd.DND.error(DND.java:227)     at org.eclipse.swt.dnd.DropTarget. (DropTarget.java:142)     at org.eclipse.ui.internal.EditorSashContainer.addDropSupport(EditorSashContainer.java:542)     at org.eclipse.ui.internal.EditorSashContainer.createControl(EditorSashContainer.java:534)     at org.eclipse.ui.internal.EditorAreaHelper. (EditorAreaHelper.java:41)     at org.eclipse.ui.internal.WorkbenchPage.init(WorkbenchPage.java:2507)     at org.eclipse.ui.internal.WorkbenchPage. (Workbench...

Kafka performance tuning

Performance Tuning of Kafka is critical when your cluster grow in size. Below are few points to consider to improve Kafka performance: Consumer group ID : Never use same exact consumer group ID for dozens of machines consuming from different topics. All of those commits will end up on the same exact partition of __consumer_offsets , hence the same broker, and this might in turn cause performance problems. Choose the consumer group ID to group_id+topic_name . Skewed : A broker is skewed if its number of partitions is greater that the average of partitions per broker on the given topic. Example: 2 brokers share 4 partitions, if one of them has 3 partitions, it is skewed (3 > 2). Try to make sure that none of the brokers is skewed. Spread : Brokers spread is the percentage of brokers in the cluster that has partitions for the given topic. Example: 3 brokers share a topic that has 2 partitions, so 66% of the brokers have partitions for this topic. Try to achieve 100% broker spread...