SlideShare a Scribd company logo
1 of 58
Download to read offline
Apache Druid Auto Scale-out/in for Streaming
Data Ingestion on Kubernetes
Jinchul Kim
About Jinchul
• DevOps engineer and Senior Software Developer at SK Telecom (2017 ~ )
• Scrum master for cloud platform development using Kubernetes, Docker, and a variety of applications
• Committer of Apache Impala Project (2018 ~)
• SAP HANA in-memory engine at SAP Labs Korea (2008 ~ 2017)
• Designed, wrote server-side code by using C++: SQL/SQLScript parser, semantic analyzer, SQL optimizer, rule/
cost based optimization, plan explanation and executor, SQL plan cache, and SQLScript debugger
• Received "SAP Applaud Award" for strategic contribution with impact across teams/functions and overcame
signicant challenges on HANA scale-out quality
• Motivation
• Background & terminology
• Apache Kafka
• Apache Druid
• Docker & Kubernetes
• Helm
• Auto Scaling in Druid
• Horizontal Pods Auto Scaling with Custom Metrics on Kubernetes
• Horizontal Pods Auto Scaling: Scale-in issue and workarounds
• Conclusion
Agenda
Motivation
• Why do we need auto-scaling?

• Cost saving by resource management

• What kinds of information do we need for auto-scaling?

• Hardware resource metrics

• Custom metrics from service
Motivation (Cont.)
• Drawbacks in auto-scaling feature of Apache Druid

• Druid's auto scaling is only available in AWS

• A few minutes for start-up and shutdown of VMs

• Druid's auto scaling is tightly coupled with AWS API
Background 

& Terminology
[Overview of Apache Kafka — By Ch.ko123 — Own work, CC BY 4.0, 

https://commons.wikimedia.org/w/index.php?curid=59871096]
[Druid Architecture, http://druid.io/technology]
[Druid Architecture, http://druid.io/docs/latest/design/ ]
[Druid Architecture, http://druid.io/technology]
[Druid Architecture, http://druid.io/technology]
• Overlord
• Assigns ingestion tasks to Middle
Managers 

• Is a controller of data ingestion into Druid

• Watches over Middle Managers

• Coordinates segment publishing

• Middle Manager
• Processes handle ingestion of new data
into the cluster

• Reads external data sources and
publishes new Druid segments

• Is called Worker node

• Executes submitted tasks

• Forwards tasks to peons that run in
separate JVMs

• Peon
• Runs a single task in a single JVM

• Is managed by Middle Manager
WHAT HAS DOCKER DONE FOR US?
• Continuous delivery
- Deliver software more often and with less errors
- No time spent on dev-to-ops handoffs
• Improved Security
- Containers help isolate each part of your system and
provides better control of each component of your
system
• Run anything, anywhere
- All languages, all databases, all operating systems
- Any distribution, any cloud, any machine
• Reproducibility
- Reduces the times we say “it only worked on my
machine”
VMs vs. Containers
Source: https://www.docker.com/whatisdocker/
Containers are isolated, but
share OS and, where
appropriate, bins/libraries
WHAT DOES KUBERNETES DO?
• Kubernetes is an open-source system for automating
deployment, scaling, and management of
containerized applications.
• Improves reliability
-Continuously monitors and manages your containers
-Will scale your application to handle changes in load
• Better use of infrastructure resources
-Helps reduce infrastructure requirements by
gracefully scaling up and down your entire platform
• Coordinates what containers run where and when
across your system
Helm Architecture
Helm Client
gRPC RESTful
Chart

Repository
Kubernetes Cluster
App. App. App.
Helm
• Package manager for managing Kubernetes applications
• Helm Charts helps you define, install, and upgrade Kubernetes application
• Renders k8s manifest files and send them to k8s API => launch apps into the k8s cluster
…
K8S API ServerTiller Server
Docker
Image
Registry
* The basic chart format consists of the templates directory, values.yaml, and other files as below.
Auto Scaling in Druid
The Autoscaling mechanisms currently in place are tightly coupled with our deployment
infrastructure but the framework should be in place for other implementations. We are highly
open to new implementations or extensions of the existing mechanisms. In our own
deployments, middle manager nodes are Amazon AWS EC2 nodes and they are
provisioned to register themselves in a galaxy environment.

If autoscaling is enabled, new middle managers may be added when a task has been in
pending state for too long. Middle managers may be terminated if they have not run any
tasks for a period of time.
“
”
[Autoscaling, http://druid.io/docs/latest/design/overlord.html ]
Description of Auto Scaling in Druid
[EC2AutoScalar.java, https://github.com/apache/incubator-druid/blob/master/indexing-service/src/main/java/org/apache/druid/
indexing/overlord/autoscaling/ec2/EC2AutoScaler.java ]
public class EC2AutoScaler implements AutoScaler<EC2EnvironmentConfig>
{
...
@Override
public AutoScalingData provision() { ... }
...
@Override
public AutoScalingData terminate(List<String> ips) { ... }
...
}
Implementation of Auto Scaling in Druid
Horizontal Pods Auto
Scaling with Custom
Metrics on Kubernetes
Horizontal Pod Autoscaler
Deployment
ReplicaSet
Custom Metrics API
Prometheus
MiddleManager Pod
MiddleManager
Overlord

Watcher
MiddleManager Pod
MiddleManager
Overlord

Watcher
MiddleManager Pod
MiddleManager
Overlord

Watcher
…
/druid_ingestion_num_peons
/druid_ingestion_num_workers
/druid_ingestion_num_pending_tasks
/druid_ingestion_num_running_tasks
/druid_ingestion_expected_num_workers
/druid_ingestion_current_load
custom.metrics.k8s.io/v1beta1
Exposing Custom Metrics to Prometheus (Cont.)
Property Description
druid_ingestion_num_peons The number of peons for each worker
druid_ingestion_num_workers The number of workers in indexing service
druid_ingestion_num_pending_tasks The number of pending tasks in indexing service
druid_ingestion_num_running_tasks The number of running tasks in indexing service
druid_ingestion_expected_num_workers The number of expected workers in indexing service
druid_ingestion_current_load Percentage of current load
/druid/indexer/v1/workers
/druid/indexer/v1/pendingTasks
/druid/indexer/v1/runningTasks
HTTP endpoint of
Overlord process
1. RESTful HTTP request

2. Get JSON string

3. Parse the string and replace the property
current_load (%)

(=round(expected_numworkers / num_workers * 100))
0 100 200 100 300 150 350 175 100 200 175 175
expected_num_workers

(=int(math.ceil(expected_num_tasks / num_peons))
0 1 2 2 6 6 14 14 14 28 28 28
expected_num_tasks

(=num_pending_tasks + num_running_tasks)
0 2 14 14 46 46 112 112 112 222 222 222
num_peons

(=druid.worker.capacity of Middle Manager)
8
num_workers

(=The number of Middle Manager processes)
1 1 1 2 2 4 4 8 14 14 16 16
num_pending_tasks 0 0 6 0 30 14 80 48 0 110 94 94
num_running_tasks 0 2 8 14 16 32 32 64 112 112 128 128
num_incoming_tasks 2 12 0 32 0 66 0 0 110 0 0 0
* Metrics from Overlord process
* Calculated values using the metrics from Overlord process
minReplicas
maxReplicas
Set once at deployment
$ kubectl create namespace monitoring && kubectl create namespace demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl create namespace monitoring && kubectl create namespace demo
namespace “monitoring” created
namespace "demo" created
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ helm install 
--name druid 
--namespace=demo 
--set service.externalIPs=50.1.100.121 
--set persistence.data.storageClass=local-disk5 
--set persistence.log.storageClass=local-disk6 
--set congs.hadoop.resourcePath=
resources/demo/conf/hadoop 
--set congs.druid.resourcePath=
resources/demo/conf/druid 
--set indexerLogs.hadoop.directory=/druid/logs 
--set storage.hadoop.directory=/druid/storage 
--set metadataStorage.mysql.uri=
jdbc:mysql://mysql-mysqlha-0.mysql-mysqlha:3306/druid?useSSL=false 
--set metadataStorage.mysql.user=druid 
--set metadataStorage.mysql.password=druid 
--set indexerTask.hadoopWorkingPath=/druid/indexing-tmp 
./incubator/druid
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n demo
NAME READY STATUS RESTARTS AGE
druid-broker-0 1/1 Running 0 1m
druid-coordinator-0 1/1 Running 0 1m
druid-historical-0 1/1 Running 0 1m
druid-middlemanager-75558c5d65-f6dmh 2/2 Running 0 1m
druid-overlord-0 1/1 Running 0 1m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa
Cloning into 'k8s-prom-hpa'...
remote: Counting objects: 153, done.
remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153
Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (70/70), done.
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa
Cloning into 'k8s-prom-hpa'...
remote: Counting objects: 153, done.
remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153
Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (70/70), done.
$ kubectl create -f ./prometheus
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa
Cloning into 'k8s-prom-hpa'...
remote: Counting objects: 153, done.
remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153
Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done.
Resolving deltas: 100% (70/70), done.
$ kubectl create -f ./prometheus
congmap "prometheus-cong" created
deployment.apps "prometheus" created
clusterrole.rbac.authorization.k8s.io "prometheus" created
serviceaccount "prometheus" created
clusterrolebinding.rbac.authorization.k8s.io "prometheus" created
service "prometheus" created
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ make certs
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ make certs
Generating TLS certs
Generating a 2048 bit RSA private key
......................................+++
.......................+++
writing new private key to 'metrics-ca.key'
-----
2018/09/19 20:05:54 [INFO] generate received request
2018/09/19 20:05:54 [INFO] received CSR
2018/09/19 20:05:54 [INFO] generating key: rsa-2048
2018/09/19 20:05:55 [INFO] encoded CSR
2018/09/19 20:05:55 [INFO] signed certicate with serial number
369504685819654624616304590957348031615297503101
Generating custom-metrics-api/cm-adapter-serving-certs.yaml
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl create -f ./custom-metrics-api
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl create -f ./custom-metrics-api
secret "cm-adapter-serving-certs" created
clusterrolebinding.rbac.authorization.k8s.io "custom-metrics:system:auth-delegator"
created
rolebinding.rbac.authorization.k8s.io "custom-metrics-auth-reader" created
deployment.extensions "custom-metrics-apiserver" created
clusterrolebinding.rbac.authorization.k8s.io "custom-metrics-resource-reader" created
serviceaccount "custom-metrics-apiserver" created
service "custom-metrics-apiserver" created
apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" created
clusterrole.rbac.authorization.k8s.io "custom-metrics-server-resources" created
clusterrole.rbac.authorization.k8s.io "custom-metrics-resource-reader" created
clusterrolebinding.rbac.authorization.k8s.io "hpa-controller-custom-metrics" created
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n monitoring
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n monitoring
NAME READY STATUS RESTARTS AGE
custom-metrics-apiserver-7dd968d85-zhrhw 1/1 Running 0 1m
prometheus-7dff795b9f-5ltcn 1/1 Running 0 4m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq .
{
"kind": "APIResourceList",
"apiVersion": "v1",
"groupVersion": "custom.metrics.k8s.io/v1beta1",
"resources": [
{
"name": "persistentvolumeclaims/kubelet_volume_stats_inodes_free",
"singularName": "",
"namespaced": true,
"kind": "MetricValueList",
"verbs": [
"get"
]
},
{
"name": "namespaces/kube_statefulset_status_observed_generation",
"singularName": "",
"namespaced": false,
"kind": "MetricValueList",
"verbs": [
…
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl create -f ./druid/middlemanager-hpa.yaml
Exploring Middle Manager Auto Scaling based on Custom Metrics
apiVersion: autoscaling/v2beta1
kind: HorizontalPodAutoscaler
metadata:
namespace: demo
name: druid-mm
spec:
scaleTargetRef:
apiVersion: extensions/v1beta1
kind: Deployment
name: druid-middlemanager
minReplicas: 1
maxReplicas: 16
metrics:
- type: Pods
pods:
metricName: druid_ingestion_current_load
targetAverageValue: 100
$ kubectl create -f ./druid/middlemanager-hpa.yaml
horizontalpodautoscaler.autoscaling "druid-mm" created
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$ kubectl get hpa -n demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m
$ kubectl get hpa -n demo
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m
$ kubectl get hpa -n demo
NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE
druid-mm Deployment/druid-middlemanager 300/100 1 16 16 2m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get --raw 
/apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/*/druid_ingestion_current_load
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get --raw 
/apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/*/druid_ingestion_current_load
{
"kind": "MetricValueList",
"apiVersion": "custom.metrics.k8s.io/v1beta1",
"metadata": {
"selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/%2A/
druid_ingestion_current_load"
},
"items": [
{
"describedObject": {
"kind": "Pod",
"namespace": "demo",
"name": "druid-middlemanager-75558c5d65-242gh",
"apiVersion": "/__internal"
},
"metricName": "druid_ingestion_current_load",
"timestamp": "2019-02-26T22:53:38Z",
"value": “175"
},
…
}
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
$ kubectl get pods -n demo
NAME READY STATUS RESTARTS AGE
druid-broker-0 1/1 Running 0 7m
druid-coordinator-0 1/1 Running 0 8m
druid-historical-0 1/1 Running 0 8m
druid-middlemanager-75558c5d65-242gh 2/2 Running 0 8m
druid-middlemanager-75558c5d65-5227p 2/2 Running 0 8m
druid-middlemanager-75558c5d65-5hrmp 2/2 Running 0 8m
druid-middlemanager-75558c5d65-5sdr8 2/2 Running 0 8m
druid-middlemanager-75558c5d65-889z5 2/2 Running 0 8m
druid-middlemanager-75558c5d65-8k22s 2/2 Running 0 8m
druid-middlemanager-75558c5d65-9nk2j 2/2 Running 0 8m
druid-middlemanager-75558c5d65-9zcj6 2/2 Running 0 8m
druid-middlemanager-75558c5d65-bzvjt 2/2 Running 0 8m
druid-middlemanager-75558c5d65-cvd82 2/2 Running 0 9m
druid-middlemanager-75558c5d65-f6dmh 2/2 Running 0 9m
druid-middlemanager-75558c5d65-fdpws 2/2 Running 0 9m
druid-middlemanager-75558c5d65-gapws 2/2 Running 0 9m
druid-middlemanager-75558c5d65-jjh6f 2/2 Running 0 9m
druid-middlemanager-75558c5d65-w7gbd2/2 Running 0 9m
druid-middlemanager-75558c5d65-ztb6h 2/2 Running 0 9m
druid-overlord-0 1/1 Running 0 7m
$
Exploring Middle Manager Auto Scaling based on Custom Metrics
Horizontal Pods Auto Scaling:
Scale-in issue and workarounds
Scale-in Issue
• Eviction of pods by random fashion while

• Web-server













• Druid Middle-manager









Horizontal Pod Auto-scaler
Ç Ç
Horizontal Pod Auto-scaler
Ç Ç
[replica_set.go, https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/replicaset/replica_set.go#L459 ]
Precedences Rules & Workaround
1. Unassigned < Assigned

2. Pending < Unknown < Running

3. Not ready < Ready
4. Ready for empty time < Less time < More time

5. Higher restart counts < Lower restart counts

6. Empty creation time pods < Newer pods < Older pods
Conclusion
Kubernetes Druid
Coverage
Any (private/public) Cloud
platform if Kubernetes is
available
AWS EC2
Start/Stop instance A few seconds only A few minutes
Ownership of auto-scaling
Decoupling from Druid core
source
Tightly coupled with Druid
core source
Extensibility
Easily extensible: Druid
Historical node and any
other applications
Not supports historical node
Who is the better controller for Druid Auto Scaling?

More Related Content

What's hot

Developing Real-Time Data Pipelines with Apache Kafka
Developing Real-Time Data Pipelines with Apache KafkaDeveloping Real-Time Data Pipelines with Apache Kafka
Developing Real-Time Data Pipelines with Apache KafkaJoe Stein
 
Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Araf Karsh Hamid
 
CDC patterns in Apache KafkaÂŽ
CDC patterns in Apache KafkaÂŽCDC patterns in Apache KafkaÂŽ
CDC patterns in Apache KafkaÂŽconfluent
 
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...Amazon Web Services
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20Amazon Web Services Korea
 
Best Practices of Infrastructure as Code with Terraform
Best Practices of Infrastructure as Code with TerraformBest Practices of Infrastructure as Code with Terraform
Best Practices of Infrastructure as Code with TerraformDevOps.com
 
Druid Adoption Tips and Tricks
Druid Adoption Tips and TricksDruid Adoption Tips and Tricks
Druid Adoption Tips and TricksImply
 
Apache Kafka - Martin Podval
Apache Kafka - Martin PodvalApache Kafka - Martin Podval
Apache Kafka - Martin PodvalMartin Podval
 
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...Athens Big Data
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafkaemreakis
 
iceberg introduction.pptx
iceberg introduction.pptxiceberg introduction.pptx
iceberg introduction.pptxDori Waldman
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderDatabricks
 
CI/CD Tools Universe: The Ultimate List
CI/CD Tools Universe: The Ultimate ListCI/CD Tools Universe: The Ultimate List
CI/CD Tools Universe: The Ultimate ListPlutora
 
클라우드 기반 AWS 데이터베이스 선택 옵션 - AWS Summit Seoul 2017
클라우드 기반 AWS 데이터베이스 선택 옵션 - AWS Summit Seoul 2017 클라우드 기반 AWS 데이터베이스 선택 옵션 - AWS Summit Seoul 2017
클라우드 기반 AWS 데이터베이스 선택 옵션 - AWS Summit Seoul 2017 Amazon Web Services Korea
 
Amazon Aurora Deep Dive (김기완) - AWS DB Day
Amazon Aurora Deep Dive (김기완) - AWS DB DayAmazon Aurora Deep Dive (김기완) - AWS DB Day
Amazon Aurora Deep Dive (김기완) - AWS DB DayAmazon Web Services Korea
 
Realtime Analytics on AWS
Realtime Analytics on AWSRealtime Analytics on AWS
Realtime Analytics on AWSSungmin Kim
 
How to apply machine learning into your CI/CD pipeline
How to apply machine learning into your CI/CD pipelineHow to apply machine learning into your CI/CD pipeline
How to apply machine learning into your CI/CD pipelineAlon Weiss
 

What's hot (20)

Developing Real-Time Data Pipelines with Apache Kafka
Developing Real-Time Data Pipelines with Apache KafkaDeveloping Real-Time Data Pipelines with Apache Kafka
Developing Real-Time Data Pipelines with Apache Kafka
 
Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics Apache Flink, AWS Kinesis, Analytics
Apache Flink, AWS Kinesis, Analytics
 
kafka
kafkakafka
kafka
 
CDC patterns in Apache KafkaÂŽ
CDC patterns in Apache KafkaÂŽCDC patterns in Apache KafkaÂŽ
CDC patterns in Apache KafkaÂŽ
 
DevOps with Kubernetes
DevOps with KubernetesDevOps with Kubernetes
DevOps with Kubernetes
 
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...
Using HashiCorp’s Terraform to build your infrastructure on AWS - Pop-up Loft...
 
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
AWS 기반의 마이크로 서비스 아키텍쳐 구현 방안 :: 김필중 :: AWS Summit Seoul 20
 
Best Practices of Infrastructure as Code with Terraform
Best Practices of Infrastructure as Code with TerraformBest Practices of Infrastructure as Code with Terraform
Best Practices of Infrastructure as Code with Terraform
 
Druid Adoption Tips and Tricks
Druid Adoption Tips and TricksDruid Adoption Tips and Tricks
Druid Adoption Tips and Tricks
 
Apache Kafka - Martin Podval
Apache Kafka - Martin PodvalApache Kafka - Martin Podval
Apache Kafka - Martin Podval
 
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
22nd Athens Big Data Meetup - 1st Talk - MLOps Workshop: The Full ML Lifecycl...
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
iceberg introduction.pptx
iceberg introduction.pptxiceberg introduction.pptx
iceberg introduction.pptx
 
Accelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks AutoloaderAccelerating Data Ingestion with Databricks Autoloader
Accelerating Data Ingestion with Databricks Autoloader
 
CI/CD Tools Universe: The Ultimate List
CI/CD Tools Universe: The Ultimate ListCI/CD Tools Universe: The Ultimate List
CI/CD Tools Universe: The Ultimate List
 
클라우드 기반 AWS 데이터베이스 선택 옵션 - AWS Summit Seoul 2017
클라우드 기반 AWS 데이터베이스 선택 옵션 - AWS Summit Seoul 2017 클라우드 기반 AWS 데이터베이스 선택 옵션 - AWS Summit Seoul 2017
클라우드 기반 AWS 데이터베이스 선택 옵션 - AWS Summit Seoul 2017
 
Amazon Aurora Deep Dive (김기완) - AWS DB Day
Amazon Aurora Deep Dive (김기완) - AWS DB DayAmazon Aurora Deep Dive (김기완) - AWS DB Day
Amazon Aurora Deep Dive (김기완) - AWS DB Day
 
Apache Kafka
Apache KafkaApache Kafka
Apache Kafka
 
Realtime Analytics on AWS
Realtime Analytics on AWSRealtime Analytics on AWS
Realtime Analytics on AWS
 
How to apply machine learning into your CI/CD pipeline
How to apply machine learning into your CI/CD pipelineHow to apply machine learning into your CI/CD pipeline
How to apply machine learning into your CI/CD pipeline
 

Similar to Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes

Dok Talks #124 - Intro to Druid on Kubernetes
Dok Talks #124 - Intro to Druid on KubernetesDok Talks #124 - Intro to Druid on Kubernetes
Dok Talks #124 - Intro to Druid on KubernetesDoKC
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoopclairvoyantllc
 
PaaSTA: Autoscaling at Yelp
PaaSTA: Autoscaling at YelpPaaSTA: Autoscaling at Yelp
PaaSTA: Autoscaling at YelpNathan Handler
 
Clocker - How to Train your Docker Cloud
Clocker - How to Train your Docker CloudClocker - How to Train your Docker Cloud
Clocker - How to Train your Docker CloudAndrew Kennedy
 
Monitoring in Motion: Monitoring Containers and Amazon ECS
Monitoring in Motion: Monitoring Containers and Amazon ECSMonitoring in Motion: Monitoring Containers and Amazon ECS
Monitoring in Motion: Monitoring Containers and Amazon ECSAmazon Web Services
 
Getting Started with MariaDB with Docker
Getting Started with MariaDB with DockerGetting Started with MariaDB with Docker
Getting Started with MariaDB with DockerMariaDB plc
 
KubeCon 2017: Kubernetes from Dev to Prod
KubeCon 2017: Kubernetes from Dev to ProdKubeCon 2017: Kubernetes from Dev to Prod
KubeCon 2017: Kubernetes from Dev to ProdSubhas Dandapani
 
Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Jakub Hajek
 
Improving Apache Spark Downscaling
 Improving Apache Spark Downscaling Improving Apache Spark Downscaling
Improving Apache Spark DownscalingDatabricks
 
'DOCKER' & CLOUD: ENABLERS For DEVOPS
'DOCKER' & CLOUD:  ENABLERS For DEVOPS'DOCKER' & CLOUD:  ENABLERS For DEVOPS
'DOCKER' & CLOUD: ENABLERS For DEVOPSACA IT-Solutions
 
Docker and Cloud - Enables for DevOps - by ACA-IT
Docker and Cloud - Enables for DevOps - by ACA-ITDocker and Cloud - Enables for DevOps - by ACA-IT
Docker and Cloud - Enables for DevOps - by ACA-ITStijn Wijndaele
 
20150425 experimenting with openstack sahara on docker
20150425 experimenting with openstack sahara on docker20150425 experimenting with openstack sahara on docker
20150425 experimenting with openstack sahara on dockerWei Ting Chen
 
What's the Hadoop-la about Kubernetes?
What's the Hadoop-la about Kubernetes?What's the Hadoop-la about Kubernetes?
What's the Hadoop-la about Kubernetes?DataWorks Summit
 
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...Emerson Eduardo Rodrigues Von Staffen
 
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...Amazon Web Services
 
Migrating Existing Open Source Machine Learning to Azure
Migrating Existing Open Source Machine Learning to AzureMigrating Existing Open Source Machine Learning to Azure
Migrating Existing Open Source Machine Learning to AzureRevolution Analytics
 
Cloud-native .NET Microservices mit Kubernetes
Cloud-native .NET Microservices mit KubernetesCloud-native .NET Microservices mit Kubernetes
Cloud-native .NET Microservices mit KubernetesQAware GmbH
 
Migrating existing open source machine learning to azure
Migrating existing open source machine learning to azureMigrating existing open source machine learning to azure
Migrating existing open source machine learning to azureMicrosoft Tech Community
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB
 

Similar to Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes (20)

Dok Talks #124 - Intro to Druid on Kubernetes
Dok Talks #124 - Intro to Druid on KubernetesDok Talks #124 - Intro to Druid on Kubernetes
Dok Talks #124 - Intro to Druid on Kubernetes
 
Running Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on HadoopRunning Airflow Workflows as ETL Processes on Hadoop
Running Airflow Workflows as ETL Processes on Hadoop
 
PaaSTA: Autoscaling at Yelp
PaaSTA: Autoscaling at YelpPaaSTA: Autoscaling at Yelp
PaaSTA: Autoscaling at Yelp
 
Clocker - How to Train your Docker Cloud
Clocker - How to Train your Docker CloudClocker - How to Train your Docker Cloud
Clocker - How to Train your Docker Cloud
 
Monitoring in Motion: Monitoring Containers and Amazon ECS
Monitoring in Motion: Monitoring Containers and Amazon ECSMonitoring in Motion: Monitoring Containers and Amazon ECS
Monitoring in Motion: Monitoring Containers and Amazon ECS
 
Getting Started with MariaDB with Docker
Getting Started with MariaDB with DockerGetting Started with MariaDB with Docker
Getting Started with MariaDB with Docker
 
KubeCon 2017: Kubernetes from Dev to Prod
KubeCon 2017: Kubernetes from Dev to ProdKubeCon 2017: Kubernetes from Dev to Prod
KubeCon 2017: Kubernetes from Dev to Prod
 
Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0Docker Swarm and Traefik 2.0
Docker Swarm and Traefik 2.0
 
Improving Apache Spark Downscaling
 Improving Apache Spark Downscaling Improving Apache Spark Downscaling
Improving Apache Spark Downscaling
 
'DOCKER' & CLOUD: ENABLERS For DEVOPS
'DOCKER' & CLOUD:  ENABLERS For DEVOPS'DOCKER' & CLOUD:  ENABLERS For DEVOPS
'DOCKER' & CLOUD: ENABLERS For DEVOPS
 
Docker and Cloud - Enables for DevOps - by ACA-IT
Docker and Cloud - Enables for DevOps - by ACA-ITDocker and Cloud - Enables for DevOps - by ACA-IT
Docker and Cloud - Enables for DevOps - by ACA-IT
 
20150425 experimenting with openstack sahara on docker
20150425 experimenting with openstack sahara on docker20150425 experimenting with openstack sahara on docker
20150425 experimenting with openstack sahara on docker
 
What's the Hadoop-la about Kubernetes?
What's the Hadoop-la about Kubernetes?What's the Hadoop-la about Kubernetes?
What's the Hadoop-la about Kubernetes?
 
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
Devops continuousintegration and deployment onaws puttingmoneybackintoyourmis...
 
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
DevOps, Continuous Integration and Deployment on AWS: Putting Money Back into...
 
Migrating Existing Open Source Machine Learning to Azure
Migrating Existing Open Source Machine Learning to AzureMigrating Existing Open Source Machine Learning to Azure
Migrating Existing Open Source Machine Learning to Azure
 
Cloud-native .NET Microservices mit Kubernetes
Cloud-native .NET Microservices mit KubernetesCloud-native .NET Microservices mit Kubernetes
Cloud-native .NET Microservices mit Kubernetes
 
Power of Azure Devops
Power of Azure DevopsPower of Azure Devops
Power of Azure Devops
 
Migrating existing open source machine learning to azure
Migrating existing open source machine learning to azureMigrating existing open source machine learning to azure
Migrating existing open source machine learning to azure
 
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
MongoDB SoCal 2020: Using MongoDB Services in Kubernetes: Any Platform, Devel...
 

More from DataWorks Summit

Data Science Crash Course
Data Science Crash CourseData Science Crash Course
Data Science Crash CourseDataWorks Summit
 
Floating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisFloating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisDataWorks Summit
 
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFiTracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFiDataWorks Summit
 
HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...DataWorks Summit
 
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...DataWorks Summit
 
Managing the Dewey Decimal System
Managing the Dewey Decimal SystemManaging the Dewey Decimal System
Managing the Dewey Decimal SystemDataWorks Summit
 
Practical NoSQL: Accumulo's dirlist Example
Practical NoSQL: Accumulo's dirlist ExamplePractical NoSQL: Accumulo's dirlist Example
Practical NoSQL: Accumulo's dirlist ExampleDataWorks Summit
 
HBase Global Indexing to support large-scale data ingestion at Uber
HBase Global Indexing to support large-scale data ingestion at UberHBase Global Indexing to support large-scale data ingestion at Uber
HBase Global Indexing to support large-scale data ingestion at UberDataWorks Summit
 
Scaling Cloud-Scale Translytics Workloads with Omid and Phoenix
Scaling Cloud-Scale Translytics Workloads with Omid and PhoenixScaling Cloud-Scale Translytics Workloads with Omid and Phoenix
Scaling Cloud-Scale Translytics Workloads with Omid and PhoenixDataWorks Summit
 
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFi
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFiBuilding the High Speed Cybersecurity Data Pipeline Using Apache NiFi
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFiDataWorks Summit
 
Supporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability ImprovementsSupporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability ImprovementsDataWorks Summit
 
Security Framework for Multitenant Architecture
Security Framework for Multitenant ArchitectureSecurity Framework for Multitenant Architecture
Security Framework for Multitenant ArchitectureDataWorks Summit
 
Presto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything EnginePresto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything EngineDataWorks Summit
 
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...DataWorks Summit
 
Extending Twitter's Data Platform to Google Cloud
Extending Twitter's Data Platform to Google CloudExtending Twitter's Data Platform to Google Cloud
Extending Twitter's Data Platform to Google CloudDataWorks Summit
 
Event-Driven Messaging and Actions using Apache Flink and Apache NiFi
Event-Driven Messaging and Actions using Apache Flink and Apache NiFiEvent-Driven Messaging and Actions using Apache Flink and Apache NiFi
Event-Driven Messaging and Actions using Apache Flink and Apache NiFiDataWorks Summit
 
Securing Data in Hybrid on-premise and Cloud Environments using Apache Ranger
Securing Data in Hybrid on-premise and Cloud Environments using Apache RangerSecuring Data in Hybrid on-premise and Cloud Environments using Apache Ranger
Securing Data in Hybrid on-premise and Cloud Environments using Apache RangerDataWorks Summit
 
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...DataWorks Summit
 
Computer Vision: Coming to a Store Near You
Computer Vision: Coming to a Store Near YouComputer Vision: Coming to a Store Near You
Computer Vision: Coming to a Store Near YouDataWorks Summit
 
Big Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
Big Data Genomics: Clustering Billions of DNA Sequences with Apache SparkBig Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
Big Data Genomics: Clustering Billions of DNA Sequences with Apache SparkDataWorks Summit
 

More from DataWorks Summit (20)

Data Science Crash Course
Data Science Crash CourseData Science Crash Course
Data Science Crash Course
 
Floating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache RatisFloating on a RAFT: HBase Durability with Apache Ratis
Floating on a RAFT: HBase Durability with Apache Ratis
 
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFiTracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
Tracking Crime as It Occurs with Apache Phoenix, Apache HBase and Apache NiFi
 
HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...HBase Tales From the Trenches - Short stories about most common HBase operati...
HBase Tales From the Trenches - Short stories about most common HBase operati...
 
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
Optimizing Geospatial Operations with Server-side Programming in HBase and Ac...
 
Managing the Dewey Decimal System
Managing the Dewey Decimal SystemManaging the Dewey Decimal System
Managing the Dewey Decimal System
 
Practical NoSQL: Accumulo's dirlist Example
Practical NoSQL: Accumulo's dirlist ExamplePractical NoSQL: Accumulo's dirlist Example
Practical NoSQL: Accumulo's dirlist Example
 
HBase Global Indexing to support large-scale data ingestion at Uber
HBase Global Indexing to support large-scale data ingestion at UberHBase Global Indexing to support large-scale data ingestion at Uber
HBase Global Indexing to support large-scale data ingestion at Uber
 
Scaling Cloud-Scale Translytics Workloads with Omid and Phoenix
Scaling Cloud-Scale Translytics Workloads with Omid and PhoenixScaling Cloud-Scale Translytics Workloads with Omid and Phoenix
Scaling Cloud-Scale Translytics Workloads with Omid and Phoenix
 
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFi
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFiBuilding the High Speed Cybersecurity Data Pipeline Using Apache NiFi
Building the High Speed Cybersecurity Data Pipeline Using Apache NiFi
 
Supporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability ImprovementsSupporting Apache HBase : Troubleshooting and Supportability Improvements
Supporting Apache HBase : Troubleshooting and Supportability Improvements
 
Security Framework for Multitenant Architecture
Security Framework for Multitenant ArchitectureSecurity Framework for Multitenant Architecture
Security Framework for Multitenant Architecture
 
Presto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything EnginePresto: Optimizing Performance of SQL-on-Anything Engine
Presto: Optimizing Performance of SQL-on-Anything Engine
 
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
Introducing MlFlow: An Open Source Platform for the Machine Learning Lifecycl...
 
Extending Twitter's Data Platform to Google Cloud
Extending Twitter's Data Platform to Google CloudExtending Twitter's Data Platform to Google Cloud
Extending Twitter's Data Platform to Google Cloud
 
Event-Driven Messaging and Actions using Apache Flink and Apache NiFi
Event-Driven Messaging and Actions using Apache Flink and Apache NiFiEvent-Driven Messaging and Actions using Apache Flink and Apache NiFi
Event-Driven Messaging and Actions using Apache Flink and Apache NiFi
 
Securing Data in Hybrid on-premise and Cloud Environments using Apache Ranger
Securing Data in Hybrid on-premise and Cloud Environments using Apache RangerSecuring Data in Hybrid on-premise and Cloud Environments using Apache Ranger
Securing Data in Hybrid on-premise and Cloud Environments using Apache Ranger
 
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
Big Data Meets NVM: Accelerating Big Data Processing with Non-Volatile Memory...
 
Computer Vision: Coming to a Store Near You
Computer Vision: Coming to a Store Near YouComputer Vision: Coming to a Store Near You
Computer Vision: Coming to a Store Near You
 
Big Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
Big Data Genomics: Clustering Billions of DNA Sequences with Apache SparkBig Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
Big Data Genomics: Clustering Billions of DNA Sequences with Apache Spark
 

Recently uploaded

What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?Antenna Manufacturer Coco
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsJoaquim Jorge
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptxHampshireHUG
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking MenDelhi Call girls
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking MenDelhi Call girls
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfsudhanshuwaghmare1
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessPixlogix Infotech
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountPuma Security, LLC
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerThousandEyes
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdfhans926745
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...apidays
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEarley Information Science
 

Recently uploaded (20)

What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
04-2024-HHUG-Sales-and-Marketing-Alignment.pptx
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Breaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path MountBreaking the Kubernetes Kill Chain: Host Path Mount
Breaking the Kubernetes Kill Chain: Host Path Mount
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 

Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes

  • 1. Apache Druid Auto Scale-out/in for Streaming Data Ingestion on Kubernetes Jinchul Kim
  • 2. About Jinchul • DevOps engineer and Senior Software Developer at SK Telecom (2017 ~ ) • Scrum master for cloud platform development using Kubernetes, Docker, and a variety of applications • Committer of Apache Impala Project (2018 ~) • SAP HANA in-memory engine at SAP Labs Korea (2008 ~ 2017) • Designed, wrote server-side code by using C++: SQL/SQLScript parser, semantic analyzer, SQL optimizer, rule/ cost based optimization, plan explanation and executor, SQL plan cache, and SQLScript debugger • Received "SAP Applaud Award" for strategic contribution with impact across teams/functions and overcame signicant challenges on HANA scale-out quality
  • 3. • Motivation • Background & terminology • Apache Kafka • Apache Druid • Docker & Kubernetes • Helm • Auto Scaling in Druid • Horizontal Pods Auto Scaling with Custom Metrics on Kubernetes • Horizontal Pods Auto Scaling: Scale-in issue and workarounds • Conclusion Agenda
  • 4. Motivation • Why do we need auto-scaling? • Cost saving by resource management • What kinds of information do we need for auto-scaling? • Hardware resource metrics • Custom metrics from service
  • 5. Motivation (Cont.) • Drawbacks in auto-scaling feature of Apache Druid • Druid's auto scaling is only available in AWS • A few minutes for start-up and shutdown of VMs • Druid's auto scaling is tightly coupled with AWS API
  • 7. [Overview of Apache Kafka — By Ch.ko123 — Own work, CC BY 4.0, 
 https://commons.wikimedia.org/w/index.php?curid=59871096]
  • 12. • Overlord • Assigns ingestion tasks to Middle Managers • Is a controller of data ingestion into Druid • Watches over Middle Managers • Coordinates segment publishing • Middle Manager • Processes handle ingestion of new data into the cluster • Reads external data sources and publishes new Druid segments • Is called Worker node • Executes submitted tasks • Forwards tasks to peons that run in separate JVMs • Peon • Runs a single task in a single JVM • Is managed by Middle Manager
  • 13. WHAT HAS DOCKER DONE FOR US? • Continuous delivery - Deliver software more often and with less errors - No time spent on dev-to-ops handoffs • Improved Security - Containers help isolate each part of your system and provides better control of each component of your system • Run anything, anywhere - All languages, all databases, all operating systems - Any distribution, any cloud, any machine • Reproducibility - Reduces the times we say “it only worked on my machine”
  • 14. VMs vs. Containers Source: https://www.docker.com/whatisdocker/ Containers are isolated, but share OS and, where appropriate, bins/libraries
  • 15. WHAT DOES KUBERNETES DO? • Kubernetes is an open-source system for automating deployment, scaling, and management of containerized applications. • Improves reliability -Continuously monitors and manages your containers -Will scale your application to handle changes in load • Better use of infrastructure resources -Helps reduce infrastructure requirements by gracefully scaling up and down your entire platform • Coordinates what containers run where and when across your system
  • 16. Helm Architecture Helm Client gRPC RESTful Chart
 Repository Kubernetes Cluster App. App. App. Helm • Package manager for managing Kubernetes applications • Helm Charts helps you define, install, and upgrade Kubernetes application • Renders k8s manifest files and send them to k8s API => launch apps into the k8s cluster … K8S API ServerTiller Server Docker Image Registry
  • 17. * The basic chart format consists of the templates directory, values.yaml, and other files as below.
  • 19. The Autoscaling mechanisms currently in place are tightly coupled with our deployment infrastructure but the framework should be in place for other implementations. We are highly open to new implementations or extensions of the existing mechanisms. In our own deployments, middle manager nodes are Amazon AWS EC2 nodes and they are provisioned to register themselves in a galaxy environment. If autoscaling is enabled, new middle managers may be added when a task has been in pending state for too long. Middle managers may be terminated if they have not run any tasks for a period of time. “ ” [Autoscaling, http://druid.io/docs/latest/design/overlord.html ] Description of Auto Scaling in Druid
  • 20. [EC2AutoScalar.java, https://github.com/apache/incubator-druid/blob/master/indexing-service/src/main/java/org/apache/druid/ indexing/overlord/autoscaling/ec2/EC2AutoScaler.java ] public class EC2AutoScaler implements AutoScaler<EC2EnvironmentConfig> { ... @Override public AutoScalingData provision() { ... } ... @Override public AutoScalingData terminate(List<String> ips) { ... } ... } Implementation of Auto Scaling in Druid
  • 21. Horizontal Pods Auto Scaling with Custom Metrics on Kubernetes
  • 22. Horizontal Pod Autoscaler Deployment ReplicaSet Custom Metrics API Prometheus MiddleManager Pod MiddleManager Overlord
 Watcher MiddleManager Pod MiddleManager Overlord
 Watcher MiddleManager Pod MiddleManager Overlord
 Watcher … /druid_ingestion_num_peons /druid_ingestion_num_workers /druid_ingestion_num_pending_tasks /druid_ingestion_num_running_tasks /druid_ingestion_expected_num_workers /druid_ingestion_current_load custom.metrics.k8s.io/v1beta1
  • 23.
  • 24. Exposing Custom Metrics to Prometheus (Cont.) Property Description druid_ingestion_num_peons The number of peons for each worker druid_ingestion_num_workers The number of workers in indexing service druid_ingestion_num_pending_tasks The number of pending tasks in indexing service druid_ingestion_num_running_tasks The number of running tasks in indexing service druid_ingestion_expected_num_workers The number of expected workers in indexing service druid_ingestion_current_load Percentage of current load /druid/indexer/v1/workers /druid/indexer/v1/pendingTasks /druid/indexer/v1/runningTasks HTTP endpoint of Overlord process 1. RESTful HTTP request
 2. Get JSON string
 3. Parse the string and replace the property
  • 25. current_load (%)
 (=round(expected_numworkers / num_workers * 100)) 0 100 200 100 300 150 350 175 100 200 175 175 expected_num_workers
 (=int(math.ceil(expected_num_tasks / num_peons)) 0 1 2 2 6 6 14 14 14 28 28 28 expected_num_tasks
 (=num_pending_tasks + num_running_tasks) 0 2 14 14 46 46 112 112 112 222 222 222 num_peons
 (=druid.worker.capacity of Middle Manager) 8 num_workers
 (=The number of Middle Manager processes) 1 1 1 2 2 4 4 8 14 14 16 16 num_pending_tasks 0 0 6 0 30 14 80 48 0 110 94 94 num_running_tasks 0 2 8 14 16 32 32 64 112 112 128 128 num_incoming_tasks 2 12 0 32 0 66 0 0 110 0 0 0 * Metrics from Overlord process * Calculated values using the metrics from Overlord process minReplicas maxReplicas Set once at deployment
  • 26. $ kubectl create namespace monitoring && kubectl create namespace demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 27. $ kubectl create namespace monitoring && kubectl create namespace demo namespace “monitoring” created namespace "demo" created $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 28. $ helm install --name druid --namespace=demo --set service.externalIPs=50.1.100.121 --set persistence.data.storageClass=local-disk5 --set persistence.log.storageClass=local-disk6 --set congs.hadoop.resourcePath= resources/demo/conf/hadoop --set congs.druid.resourcePath= resources/demo/conf/druid --set indexerLogs.hadoop.directory=/druid/logs --set storage.hadoop.directory=/druid/storage --set metadataStorage.mysql.uri= jdbc:mysql://mysql-mysqlha-0.mysql-mysqlha:3306/druid?useSSL=false --set metadataStorage.mysql.user=druid --set metadataStorage.mysql.password=druid --set indexerTask.hadoopWorkingPath=/druid/indexing-tmp ./incubator/druid Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 29. $ kubectl get pods -n demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 30. $ kubectl get pods -n demo NAME READY STATUS RESTARTS AGE druid-broker-0 1/1 Running 0 1m druid-coordinator-0 1/1 Running 0 1m druid-historical-0 1/1 Running 0 1m druid-middlemanager-75558c5d65-f6dmh 2/2 Running 0 1m druid-overlord-0 1/1 Running 0 1m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 31. $ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 32. $ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa Cloning into 'k8s-prom-hpa'... remote: Counting objects: 153, done. remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153 Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done. Resolving deltas: 100% (70/70), done. $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 33. $ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa Cloning into 'k8s-prom-hpa'... remote: Counting objects: 153, done. remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153 Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done. Resolving deltas: 100% (70/70), done. $ kubectl create -f ./prometheus Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 34. $ git clone https://github.com/Jinchul81/k8s-prom-hpa.git && cd k8s-prom-hpa Cloning into 'k8s-prom-hpa'... remote: Counting objects: 153, done. remote: Total 153 (delta 0), reused 0 (delta 0), pack-reused 153 Receiving objects: 100% (153/153), 89.36 KiB | 0 bytes/s, done. Resolving deltas: 100% (70/70), done. $ kubectl create -f ./prometheus congmap "prometheus-cong" created deployment.apps "prometheus" created clusterrole.rbac.authorization.k8s.io "prometheus" created serviceaccount "prometheus" created clusterrolebinding.rbac.authorization.k8s.io "prometheus" created service "prometheus" created $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 35. $ make certs Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 36. $ make certs Generating TLS certs Generating a 2048 bit RSA private key ......................................+++ .......................+++ writing new private key to 'metrics-ca.key' ----- 2018/09/19 20:05:54 [INFO] generate received request 2018/09/19 20:05:54 [INFO] received CSR 2018/09/19 20:05:54 [INFO] generating key: rsa-2048 2018/09/19 20:05:55 [INFO] encoded CSR 2018/09/19 20:05:55 [INFO] signed certicate with serial number 369504685819654624616304590957348031615297503101 Generating custom-metrics-api/cm-adapter-serving-certs.yaml $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 37. $ kubectl create -f ./custom-metrics-api Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 38. $ kubectl create -f ./custom-metrics-api secret "cm-adapter-serving-certs" created clusterrolebinding.rbac.authorization.k8s.io "custom-metrics:system:auth-delegator" created rolebinding.rbac.authorization.k8s.io "custom-metrics-auth-reader" created deployment.extensions "custom-metrics-apiserver" created clusterrolebinding.rbac.authorization.k8s.io "custom-metrics-resource-reader" created serviceaccount "custom-metrics-apiserver" created service "custom-metrics-apiserver" created apiservice.apiregistration.k8s.io "v1beta1.custom.metrics.k8s.io" created clusterrole.rbac.authorization.k8s.io "custom-metrics-server-resources" created clusterrole.rbac.authorization.k8s.io "custom-metrics-resource-reader" created clusterrolebinding.rbac.authorization.k8s.io "hpa-controller-custom-metrics" created $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 39. $ kubectl get pods -n monitoring Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 40. $ kubectl get pods -n monitoring NAME READY STATUS RESTARTS AGE custom-metrics-apiserver-7dd968d85-zhrhw 1/1 Running 0 1m prometheus-7dff795b9f-5ltcn 1/1 Running 0 4m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 41. $ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq . Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 42. $ kubectl get --raw "/apis/custom.metrics.k8s.io/v1beta1" | jq . { "kind": "APIResourceList", "apiVersion": "v1", "groupVersion": "custom.metrics.k8s.io/v1beta1", "resources": [ { "name": "persistentvolumeclaims/kubelet_volume_stats_inodes_free", "singularName": "", "namespaced": true, "kind": "MetricValueList", "verbs": [ "get" ] }, { "name": "namespaces/kube_statefulset_status_observed_generation", "singularName": "", "namespaced": false, "kind": "MetricValueList", "verbs": [ … Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 43. $ kubectl create -f ./druid/middlemanager-hpa.yaml Exploring Middle Manager Auto Scaling based on Custom Metrics apiVersion: autoscaling/v2beta1 kind: HorizontalPodAutoscaler metadata: namespace: demo name: druid-mm spec: scaleTargetRef: apiVersion: extensions/v1beta1 kind: Deployment name: druid-middlemanager minReplicas: 1 maxReplicas: 16 metrics: - type: Pods pods: metricName: druid_ingestion_current_load targetAverageValue: 100
  • 44. $ kubectl create -f ./druid/middlemanager-hpa.yaml horizontalpodautoscaler.autoscaling "druid-mm" created $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 45. $ kubectl get hpa -n demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 46. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 47. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ kubectl get hpa -n demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 48. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 49. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m $ kubectl get hpa -n demo Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 50. $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 100/100 1 16 1 32s $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 300/100 1 16 8 1m $ kubectl get hpa -n demo NAME REFERENCE TARGETS MINPODS MAXPODS REPLICAS AGE druid-mm Deployment/druid-middlemanager 300/100 1 16 16 2m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 51. $ kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/*/druid_ingestion_current_load Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 52. $ kubectl get --raw /apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/*/druid_ingestion_current_load { "kind": "MetricValueList", "apiVersion": "custom.metrics.k8s.io/v1beta1", "metadata": { "selfLink": "/apis/custom.metrics.k8s.io/v1beta1/namespaces/demo/pods/%2A/ druid_ingestion_current_load" }, "items": [ { "describedObject": { "kind": "Pod", "namespace": "demo", "name": "druid-middlemanager-75558c5d65-242gh", "apiVersion": "/__internal" }, "metricName": "druid_ingestion_current_load", "timestamp": "2019-02-26T22:53:38Z", "value": “175" }, … } $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 53. $ kubectl get pods -n demo NAME READY STATUS RESTARTS AGE druid-broker-0 1/1 Running 0 7m druid-coordinator-0 1/1 Running 0 8m druid-historical-0 1/1 Running 0 8m druid-middlemanager-75558c5d65-242gh 2/2 Running 0 8m druid-middlemanager-75558c5d65-5227p 2/2 Running 0 8m druid-middlemanager-75558c5d65-5hrmp 2/2 Running 0 8m druid-middlemanager-75558c5d65-5sdr8 2/2 Running 0 8m druid-middlemanager-75558c5d65-889z5 2/2 Running 0 8m druid-middlemanager-75558c5d65-8k22s 2/2 Running 0 8m druid-middlemanager-75558c5d65-9nk2j 2/2 Running 0 8m druid-middlemanager-75558c5d65-9zcj6 2/2 Running 0 8m druid-middlemanager-75558c5d65-bzvjt 2/2 Running 0 8m druid-middlemanager-75558c5d65-cvd82 2/2 Running 0 9m druid-middlemanager-75558c5d65-f6dmh 2/2 Running 0 9m druid-middlemanager-75558c5d65-fdpws 2/2 Running 0 9m druid-middlemanager-75558c5d65-gapws 2/2 Running 0 9m druid-middlemanager-75558c5d65-jjh6f 2/2 Running 0 9m druid-middlemanager-75558c5d65-w7gbd2/2 Running 0 9m druid-middlemanager-75558c5d65-ztb6h 2/2 Running 0 9m druid-overlord-0 1/1 Running 0 7m $ Exploring Middle Manager Auto Scaling based on Custom Metrics
  • 54. Horizontal Pods Auto Scaling: Scale-in issue and workarounds
  • 55. Scale-in Issue • Eviction of pods by random fashion while • Web-server
 
 
 
 
 
 
 • Druid Middle-manager
 
 
 
 
 Horizontal Pod Auto-scaler Ç Ç Horizontal Pod Auto-scaler Ç Ç
  • 56.
  • 57. [replica_set.go, https://github.com/kubernetes/kubernetes/blob/master/pkg/controller/replicaset/replica_set.go#L459 ] Precedences Rules & Workaround 1. Unassigned < Assigned 2. Pending < Unknown < Running 3. Not ready < Ready 4. Ready for empty time < Less time < More time 5. Higher restart counts < Lower restart counts 6. Empty creation time pods < Newer pods < Older pods
  • 58. Conclusion Kubernetes Druid Coverage Any (private/public) Cloud platform if Kubernetes is available AWS EC2 Start/Stop instance A few seconds only A few minutes Ownership of auto-scaling Decoupling from Druid core source Tightly coupled with Druid core source Extensibility Easily extensible: Druid Historical node and any other applications Not supports historical node Who is the better controller for Druid Auto Scaling?