May 30, 2019·6 min read·engineeringkafkaawsoperations

Amazon MSK makes Kafka infrastructure a managed service

Amazon MSK reaches general availability with managed brokers and ZooKeeper. Kafka compatibility preserves application choices while AWS takes responsibility for a defined part of cluster operation.

Managing a Kafka cluster and designing a Kafka application are different responsibilities. Amazon MSK's May 30 general-availability announcement assigns much of the infrastructure work to AWS while retaining the Kafka protocols and tools used by applications. It supplies managed brokers and ZooKeeper, with monitoring, server replacement and patching. It does not choose the partition key or define the meaning of a consumer's progress for the application.

The service entered open preview at re:Invent 2018. At general availability it supports Kafka 1.1.1 and 2.1.0. The announcement emphasizes compatibility so existing applications and Kafka-compatible tools can continue to use Kafka rather than a service-specific messaging API. That is the substantive attraction of the launch, moving a defined operational responsibility while preserving the application's streaming model.

I value Kafka's retained history and independent consumers, but its operational cost deserves a clear account. MSK is interesting because it preserves that log model while offering a different owner for broker infrastructure. The useful question is which responsibilities move to the service and which remain attached to the application.

The network boundary is still explicit

The announcement says an MSK cluster runs in a VPC managed by the service. Elastic network interfaces make its resources available through the customer's VPC, subnet and security-group arrangement. Those interfaces appear in the customer's account. This describes a network integration with a managed service, rather than a cluster of broker instances the customer administers directly.

The cluster-creation example selects a VPC and the subnets associated with the chosen Availability Zones. It then chooses a broker count per zone. The placement choices therefore remain visible to the caller even though AWS operates the underlying servers. A managed service does not eliminate the need to describe where applications reach it.

That boundary also explains the launch demonstration. It places a producer and a consumer on EC2 instances in the same VPC and uses Kafka's command-line tools to send and read records. The clients connect through the cluster information supplied by MSK. The application-facing operation remains publishing to and consuming from a Kafka topic.

The announcement exposes both bootstrap-broker information and a ZooKeeper connection string. These are different endpoints for different parts of the delivered Kafka system. Their presence is a concrete statement about the launch architecture, which still includes ZooKeeper as a managed component. No application has to infer a different metadata architecture from the service's name.

AWS manages servers while the cluster still has capacity choices

MSK continuously monitors server health and replaces failed servers, according to the announcement. It also automates patching and operates highly available ZooKeeper nodes. Those functions remove particular server-management tasks from the customer's direct workload. They do not imply that an application has no throughput or storage decisions left.

The creation workflow still selects broker instances and storage volume size per broker. Its explanation connects higher broker counts with distributing partitions across more brokers for throughput. The service also adds cluster-wide storage scale-up at general availability. Capacity is therefore represented through a managed configuration rather than disappearing from the operating model.

The Kafka 2.1 documentation explains why partitions remain relevant. Topics consist of partitioned logs, and those partitions are distributed across servers. Each partition retains its own order and replication arrangement. Changing who operates the server does not change the partition as the unit around which the application distributes its records.

This is a useful limit on the phrase fully managed. The announcement gives AWS responsibility for named infrastructure operations. Application traffic still arrives with a distribution across topics and partitions, and the cluster has provisioned resources to handle it. A managed broker can execute that workload without deciding which records need to share an order.

Control-plane identity differs from Kafka client identity

The launch uses IAM to control cluster actions. It separately describes authenticating clients through TLS certificates issued by private certificate authorities managed with AWS Certificate Manager. Those are different authority paths. Permission to call an MSK management API is not the same claim as authenticating an application to a Kafka broker.

The announcement also describes TLS encryption between clients and brokers and between brokers. In its console example, the author chooses encryption inside the cluster while allowing both TLS and plaintext client traffic. That example is a configuration choice in the article, not a statement that every launch cluster automatically refuses plaintext clients.

For data at rest, MSK uses KMS encryption keys. The example selects an AWS-managed key and notes the alternative of selecting a key in the customer's account. Again, the service exposes a meaningful choice while handling the underlying infrastructure. Choosing a managed service does not make all encryption and identity configuration identical across deployments.

The separation of these mechanisms helps preserve the real security contract. IAM governs service-management actions. TLS client authentication identifies Kafka clients where configured. Transport encryption and storage encryption protect data in different places. A statement that MSK integrates with AWS security services is less useful than retaining those distinct roles.

Existing tools keep their Kafka meaning

Once a cluster is active, the launch article retrieves its bootstrap servers using the AWS CLI. A placeholder ARN makes the boundary between management lookup and Kafka connection visible.

aws kafka get-bootstrap-brokers --cluster-arn YOUR_CLUSTER_ARN

That command obtains connection information from the service. The subsequent producer or consumer uses the Kafka endpoint in its normal tool configuration. The management API and the record protocol remain different interfaces even when both are used in the same setup procedure.

The article's topic example uses a replication factor of three and one partition. Those are deliberate demonstration choices. One partition establishes one ordered log for that topic, while replication creates copies for fault tolerance. A production application still needs a topic arrangement suited to its ordering and parallelism requirements rather than inheriting the demonstration's count by default.

Kafka's introduction explains that separate consumer groups can read the same topic independently and that consuming a record does not delete it. MSK's protocol compatibility preserves the usefulness of that model. Several downstream systems can process the same retained stream while maintaining separate positions. The service does not need a new consumer abstraction to make that possible.

My view of a stream as durable history is the reason compatibility matters here. A hosting change is less disruptive when the application can retain its producer, consumer and replay model. The operational owner changes, but the consumer's position still expresses progress through a retained log.

Migration and billing follow the managed boundary

The announcement names MirrorMaker as a tool for replicating an existing Kafka deployment into MSK. That is a data-movement path between clusters. It does not mean creating a managed cluster automatically transfers every existing record or moves every consumer's operational context. The source and destination remain distinct systems during replication.

Pricing at launch is based on broker-hours and provisioned storage-hours. ZooKeeper nodes have no separate service charge. The article says normal AWS data-transfer rates apply for transfers into and out of MSK, while transfers within a regional cluster, including broker replication and broker-to-ZooKeeper traffic, have no charge. These terms tie cost to provisioned infrastructure and the network boundary described by the service.

The announcement also lists CloudWatch metrics and CloudTrail logging for MSK API actions. Those observe different activities, Kafka performance and service-management calls respectively. An infrastructure metric and a management audit event do not replace an application's understanding of whether a particular consumer has processed the records it needs.

The release also distinguishes capabilities delivered today from work still planned. CloudFormation support is described as coming in the next few weeks, so it is not part of the announced general-availability functionality. The console and CLI examples are the demonstrated management paths. That difference matters when describing infrastructure automation around the launch service.

Availability is regional as well. The announcement names regions in the United States, Asia Pacific and Europe, including Oregon, Tokyo and Frankfurt. A compatible Kafka client does not by itself create service availability in an unlisted region. Network placement and the service location remain deployment inputs alongside the supported broker version.

MSK's general-availability launch therefore offers a specific division of labor. AWS monitors and maintains the broker and ZooKeeper infrastructure, while applications retain Kafka's topic, partition and consumer contracts. The service exposes network placement, capacity and identity choices through its managed configuration. The application still determines which records belong together and how independent readers interpret their progress through the log.