We are delighted to announce the new Strimzi 0.11.1 release with some new features!
JBOD storage support for Kafka brokers
Other than supporting the ephemeral and persistent storage, Strimzi now supports JBOD (Just a Bunch of Disks) storage for Kafka brokers (but not for Zookeeper nodes).
The JBOD data storage configuration provides a way for Kafka brokers to make use of multiple disks. JBOD is one approach to providing increased data storage for Kafka brokers. It can also improve performance when there is an independent I/O path for each disk. A JBOD configuration is described by one or more volumes, each of which can be either ephemeral or persistent.
To use JBOD with Strimzi, the storage type
must be set to the new jbod
value.
Then the volumes
property allows you to describe the disks that make up your JBOD storage array or configuration.
Here’s an example snippet with a JBOD configuration.
apiVersion: kafka.strimzi.io/v1alpha1
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
...
storage:
type: jbod
volumes:
- id: 0
type: persistent-claim
size: 100Gi
deleteClaim: false
- id: 1
type: persistent-claim
size: 100Gi
deleteClaim: false
The Cluster Operator will configure the log.dirs
Kafka parameter accordingly, in order to store messages logs on the different volumes.
Improved configuration for off-cluster access
This improvement was mostly driven and contributed by the community! A lot of developers asked about having more flexibility and extensibility on the listeners configuration for exposing the Kafka cluster outside of the Kubernetes/OpenShift cluster. Thanks to djotanov for opening a pull request about part of these new features.
When configuring the listeners.external
section of the Kafka
resource, it’s now possible to leverage a new overrides
property for a more powerful configuration.
For example, by default, using a route
listener, the route hostnames are automatically assigned by OpenShift.
Now, you can override the assigned route hostnamess, specifying the names you want to use.
Here’s an example snippet for overriding route hosts.
apiVersion: kafka.strimzi.io/v1alpha1
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
...
listeners:
external:
type: route
authentication:
type: tls
overrides:
bootstrap:
host: bootstrap.myrouter.com
brokers:
- broker: 0
host: broker-0.myrouter.com
- broker: 1
host: broker-1.myrouter.com
- broker: 2
host: broker-2.myrouter.com
The nodeport
listener is now also more configurable.
By default, the port numbers used for the bootstrap and broker services are automatically assigned by OpenShift or Kubernetes.
This new Strimzi release lets you can override the assigned node ports by specifying the requested port numbers.
Here’s an example snippet for overriding node ports.
apiVersion: kafka.strimzi.io/v1alpha1
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
...
listeners:
external:
type: nodeport
tls: true
authentication:
type: tls
overrides:
bootstrap:
nodePort: 32100
brokers:
- broker: 0
nodePort: 32000
- broker: 1
nodePort: 32001
- broker: 2
nodePort: 32002
Finally, a really interesting new feature on listeners is customization of the Kafka brokers’ advertised addresses. By default, Strimzi tries to automatically determine the hostnames and ports that your Kafka cluster advertises to its clients. This is not sufficient in all situations, because the infrastructure on which Strimzi is running might not provide the right hostname or port through which Kafka can be accessed. Now, you can customize the advertised hostname and port. Strimzi will then automatically configure the advertised address in the Kafka brokers and add it to the broker certificates so it can be used for TLS hostname verification.
Here’s an example snippet for overriding advertised addresses.
apiVersion: kafka.strimzi.io/v1alpha1
kind: Kafka
metadata:
name: my-cluster
spec:
kafka:
...
listeners:
external:
type: route
authentication:
type: tls
overrides:
brokers:
- broker: 0
advertisedHost: example.hostname.0
advertisedPort: 12340
- broker: 1
advertisedHost: example.hostname.1
advertisedPort: 12341
- broker: 2
advertisedHost: example.hostname.2
advertisedPort: 12342
You can find many more overrides option in the official documentation in the Kafka broker listeners chapter.
Prometheus alerts
Other than providing the server component for scraping metrics from your applications, the Prometheus project also provides an alerting system through the alert manager component. It is possible to declare alerting rules on the Prometheus server in order to be notified about specific conditions in the metrics. When an alert condition is evaluated as true, Prometheus sends alert data to the alert manager which then sends notifications out. Notifications can be sent via methods such as email, Slack, PagerDuty and HipChat.
The new Strimzi release provides the Kubernetes/OpenShift resources for deploying the alert manager as well as a few examples of alerting rules for Kafka and Zookeeper metrics and related notifications via Slack.
Here’s an example snippet with an alert related to the under replicated partitions metric.
- alert: UnderReplicatedPartitions
expr: kafka_server_replicamanager_underreplicatedpartitions > 0
for: 10s
labels:
severity: warning
annotations:
summary: 'Kafka under replicated partitions'
description: 'There are {{ $value }} under replicated partitions on {{ $labels.kubernetes_pod_name }}'
… and many more
Other features were included in this new release, the most important ones:
- Support for the Cluster Operator to watch all namespaces for the supported resources.
- Allow users to configure the default ImagePullPolicy related to the containers images download.
- Operator Lifecycle Manager integration which allowed to have Strimzi as part of the OperatorHub.io. You can get more information on this post
Of course, bug fixes are there as well!
Conclusion
This release represents another milestone for this open source project. You can refer to the release change log to get more information.
What are you waiting for? Engage with the community and help us to improve the Strimzi project for running your Kafka cluster on Kubernetes/OpenShift!