diff --git a/CHANGELOG.md b/CHANGELOG.md
index 21839b50b378f8e5e2399248ac35b970bae8db0c..68893bf6ca135eb7e6a09742461ec8a787d9686b 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -44,6 +44,7 @@
 - [#3455](https://github.com/influxdata/telegraf/pull/3455): Add tag/integer pair for result to net_response.
 - [#4010](https://github.com/influxdata/telegraf/pull/3455): Add application_insights output plugin.
 - [#4167](https://github.com/influxdata/telegraf/pull/4167): Added several important elasticsearch cluster health metrics.
+- [#4094](https://github.com/influxdata/telegraf/pull/4094): Add batch mode to mqtt output.
 
 ### Bugfixes
 
diff --git a/etc/telegraf.conf b/etc/telegraf.conf
index ef0f95cafc854b07e5246b6df57c89b0793103af..1e7e8bed1f6fa549ec5fde57a68e6083439825e4 100644
--- a/etc/telegraf.conf
+++ b/etc/telegraf.conf
@@ -198,6 +198,26 @@
 #   data_format = "influx"
 
 
+# # Send metrics to Azure Application Insights
+# [[outputs.application_insights]]
+#   ## Instrumentation key of the Application Insights resource.
+#   instrumentation_key = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxx"
+#
+#   ## Timeout for closing (default: 5s).
+#   # timeout = "5s"
+#
+#   ## Enable additional diagnostic logging.
+#   # enable_diagnosic_logging = false
+#
+#   ## Context Tag Sources add Application Insights context tags to a tag value.
+#   ##
+#   ## For list of allowed context tag keys see:
+#   ## https://github.com/Microsoft/ApplicationInsights-Go/blob/master/appinsights/contracts/contexttagkeys.go
+#   # [outputs.application_insights.context_tag_sources]
+#   #   "ai.cloud.role" = "kubernetes_container_name"
+#   #   "ai.cloud.roleInstance" = "kubernetes_pod_name"
+
+
 # # Configuration for AWS CloudWatch output.
 # [[outputs.cloudwatch]]
 #   ## Amazon REGION
@@ -341,6 +361,40 @@
 #   servers = ["127.0.0.1:12201", "192.168.1.1:12201"]
 
 
+# # A plugin that can transmit metrics over HTTP
+# [[outputs.http]]
+#   ## URL is the address to send metrics to
+#   url = "http://127.0.0.1:8080/metric"
+#
+#   ## Timeout for HTTP message
+#   # timeout = "5s"
+#
+#   ## HTTP method, one of: "POST" or "PUT"
+#   # method = "POST"
+#
+#   ## HTTP Basic Auth credentials
+#   # username = "username"
+#   # password = "pa$$word"
+#
+#   ## Additional HTTP headers
+#   # [outputs.http.headers]
+#   #   # Should be set to "application/json" for json data_format
+#   #   Content-Type = "text/plain; charset=utf-8"
+#
+#   ## Optional TLS Config
+#   # tls_ca = "/etc/telegraf/ca.pem"
+#   # tls_cert = "/etc/telegraf/cert.pem"
+#   # tls_key = "/etc/telegraf/key.pem"
+#   ## Use TLS but skip chain & host verification
+#   # insecure_skip_verify = false
+#
+#   ## Data format to output.
+#   ## Each data format has it's own unique set of configuration options, read
+#   ## more about them here:
+#   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
+#   # data_format = "influx"
+
+
 # # Configuration for sending metrics to an Instrumental project
 # [[outputs.instrumental]]
 #   ## Project API Token (required)
@@ -527,16 +581,22 @@
 #   ##   ex: prefix/web01.example.com/mem
 #   topic_prefix = "telegraf"
 #
+#   ## QoS policy for messages
+#   ##   0 = at most once
+#   ##   1 = at least once
+#   ##   2 = exactly once
+#   # qos = 2
+#
 #   ## username and password to connect MQTT server.
 #   # username = "telegraf"
 #   # password = "metricsmetricsmetricsmetrics"
 #
-#   ## Timeout for write operations. default: 5s
-#   # timeout = "5s"
-#
 #   ## client ID, if not set a random ID is generated
 #   # client_id = ""
 #
+#   ## Timeout for write operations. default: 5s
+#   # timeout = "5s"
+#
 #   ## Optional TLS Config
 #   # tls_ca = "/etc/telegraf/ca.pem"
 #   # tls_cert = "/etc/telegraf/cert.pem"
@@ -544,6 +604,10 @@
 #   ## Use TLS but skip chain & host verification
 #   # insecure_skip_verify = false
 #
+#   ## When true, metrics will be sent in one MQTT message per flush.  Otherwise,
+#   ## metrics are written one metric per MQTT message.
+#   # batch = false
+#
 #   ## Data format to output.
 #   ## Each data format has its own unique set of configuration options, read
 #   ## more about them here:
@@ -1169,6 +1233,11 @@
 #   # tls_key = "/etc/telegraf/key.pem"
 #   ## Use TLS but skip chain & host verification
 #   # insecure_skip_verify = true
+#
+#   ## Consul checks' tag splitting
+#   # When tags are formatted like "key:value" with ":" as a delimiter then
+#   # they will be splitted and reported as proper key:value in Telegraf
+#   # tag_delimiter = ":"
 
 
 # # Read metrics from one or many couchbase clusters
@@ -1791,19 +1860,19 @@
 #   ## List of metrics collected on above servers
 #   ## Each metric consists in a name, a jmx path and either
 #   ## a pass or drop slice attribute.
-#   ## This collect all heap memory usage metrics.
+#   ## This collect all heap memory usage metrics.
 #   [[inputs.jolokia.metrics]]
 #     name = "heap_memory_usage"
 #     mbean  = "java.lang:type=Memory"
 #     attribute = "HeapMemoryUsage"
 #
-#   ## This collect thread counts metrics.
+#   ## This collect thread counts metrics.
 #   [[inputs.jolokia.metrics]]
 #     name = "thread_count"
 #     mbean  = "java.lang:type=Threading"
 #     attribute = "TotalStartedThreadCount,ThreadCount,DaemonThreadCount,PeakThreadCount"
 #
-#   ## This collect number of class loaded/unloaded counts metrics.
+#   ## This collect number of class loaded/unloaded counts metrics.
 #   [[inputs.jolokia.metrics]]
 #     name = "class_count"
 #     mbean  = "java.lang:type=ClassLoading"
@@ -2259,7 +2328,7 @@
 #   reverse_metric_names = true
 
 
-# # A plugin to collect stats from Opensmtpd - a validating, recursive, and caching DNS resolver
+# # A plugin to collect stats from Opensmtpd - a validating, recursive, and caching DNS resolver 
 # [[inputs.opensmtpd]]
 #   ## If running as a restricted user you can prepend sudo for additional access:
 #   #use_sudo = false
@@ -3561,3 +3630,4 @@
 # [[inputs.zipkin]]
 #   # path = "/api/v1/spans" # URL path for span data
 #   # port = 9411            # Port on which Telegraf listens
+
diff --git a/plugins/outputs/mqtt/README.md b/plugins/outputs/mqtt/README.md
index 716806783047ac3ed59ed55e36baafd9d0582719..14c166f9eb8763630c3f48a3b8391a2c7d75570f 100644
--- a/plugins/outputs/mqtt/README.md
+++ b/plugins/outputs/mqtt/README.md
@@ -11,6 +11,9 @@ This plugin writes to a [MQTT Broker](http://http://mqtt.org/) acting as a mqtt
   topic_prefix = "telegraf"
 
   ## QoS policy for messages
+  ##   0 = at most once
+  ##   1 = at least once
+  ##   2 = exactly once
   qos = 2
 
   ## username and password to connect MQTT server.
@@ -30,17 +33,12 @@ This plugin writes to a [MQTT Broker](http://http://mqtt.org/) acting as a mqtt
   ## Use TLS but skip chain & host verification
   # insecure_skip_verify = false
 
-  ## Batch messages in a topic
-  ## batch = false
-  ## Flag to determine if messages sent in a topic in a flush interval,
-  ## need to be batched into one message.
-  ## batch = true, batches the messages in a topic to one messages
-  ## batch = false, default behaviour
+  ## When true, metrics will be sent in one MQTT message per flush.  Otherwise,
+  ## metrics are written one metric per MQTT message.
   # batch = false
 
-
   ## Data format to output.
-  data_format = "influx"
+  # data_format = "influx"
 ```
 
 ### Required parameters:
diff --git a/plugins/outputs/mqtt/mqtt.go b/plugins/outputs/mqtt/mqtt.go
index 5228a083a1f1045c59bc2400edc34cba337a4350..6231045b8a4e8cee618ba0a905c670fafd8a812b 100644
--- a/plugins/outputs/mqtt/mqtt.go
+++ b/plugins/outputs/mqtt/mqtt.go
@@ -23,16 +23,22 @@ var sampleConfig = `
   ##   ex: prefix/web01.example.com/mem
   topic_prefix = "telegraf"
 
+  ## QoS policy for messages
+  ##   0 = at most once
+  ##   1 = at least once
+  ##   2 = exactly once
+  # qos = 2
+
   ## username and password to connect MQTT server.
   # username = "telegraf"
   # password = "metricsmetricsmetricsmetrics"
 
-  ## Timeout for write operations. default: 5s
-  # timeout = "5s"
-
   ## client ID, if not set a random ID is generated
   # client_id = ""
 
+  ## Timeout for write operations. default: 5s
+  # timeout = "5s"
+
   ## Optional TLS Config
   # tls_ca = "/etc/telegraf/ca.pem"
   # tls_cert = "/etc/telegraf/cert.pem"
@@ -40,20 +46,15 @@ var sampleConfig = `
   ## Use TLS but skip chain & host verification
   # insecure_skip_verify = false
 
+  ## When true, metrics will be sent in one MQTT message per flush.  Otherwise,
+  ## metrics are written one metric per MQTT message.
+  # batch = false
+
   ## Data format to output.
   ## Each data format has its own unique set of configuration options, read
   ## more about them here:
   ## https://github.com/influxdata/telegraf/blob/master/docs/DATA_FORMATS_OUTPUT.md
   data_format = "influx"
-
-  ## Batch messages in a topic
-  ## batch = false
-  ## Flag to determine if messages sent in a topic in a flush interval,
-  ## need to be batched into one message.
-  ## batch = true, batches the messages in a topic to one messages
-  ## batch = false, default behaviour
-  # batch = false
-
 `
 
 type MQTT struct {