<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
 contributor license agreements.  See the NOTICE file distributed with
 this work for additional information regarding copyright ownership.
 The ASF licenses this file to You under the Apache License, Version 2.0
 (the "License"); you may not use this file except in compliance with
 the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 Unless required by applicable law or agreed to in writing, software
 distributed under the License is distributed on an "AS IS" BASIS,
 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 See the License for the specific language governing permissions and
 limitations under the License.
-->

<script><!--#include virtual="js/templateData.js" --></script>

<script id="introduction-template" type="text/x-handlebars-template">
  <h4 class="anchor-heading">
    <a class="anchor-link" id="intro_streaming" href="#intro_streaming"></a>
    <a href="#intro_streaming">What is event streaming?</a>
  </h4>
  <p>
    Event streaming is the digital equivalent of the human body's central nervous system. It is the
    technological foundation for the 'always-on' world where businesses are increasingly software-defined 
    and automated, and where the user of software is more software.
  </p>
  <p>
    Technically speaking, event streaming is the practice of capturing data in real-time from event sources
    like databases, sensors, mobile devices, cloud services, and software applications in the form of streams
    of events; storing these event streams durably for later retrieval; manipulating, processing, and reacting
    to the event streams in real-time as well as retrospectively; and routing the event streams to different
    destination technologies as needed. Event streaming thus ensures a continuous flow and interpretation of
    data so that the right information is at the right place, at the right time.
  </p>

  <h4 class="anchor-heading">
    <a class="anchor-link" id="intro_usage" href="#intro_usage"></a>
    <a href="#intro_usage">What can I use event streaming for?</a>
  </h4>
  <p>
    Event streaming is applied to a <a href="/powered-by">wide variety of use cases</a>
    across a plethora of industries and organizations. Its many examples include:
  </p>
  <ul>
    <li>
      To process payments and financial transactions in real-time, such as in stock exchanges, banks, and insurances.
    </li>
    <li>
      To track and monitor cars, trucks, fleets, and shipments in real-time, such as in logistics and the automotive industry.
    </li>
    <li>
      To continuously capture and analyze sensor data from IoT devices or other equipment, such as in factories and wind parks.
    </li>
    <li>
      To collect and immediately react to customer interactions and orders, such as in retail, the hotel and travel industry, and mobile applications.
    </li>
    <li>
      To monitor patients in hospital care and predict changes in condition to ensure timely treatment in emergencies.
    </li>
    <li>
      To connect, store, and make available data produced by different divisions of a company.
    </li>
    <li>
      To serve as the foundation for data platforms, event-driven architectures, and microservices.
    </li>
  </ul>

  <h4 class="anchor-heading">
    <a class="anchor-link" id="intro_platform" href="#intro_platform"></a>
    <a href="#intro_platform">Apache Kafka&reg; is an event streaming platform. What does that mean?</a>
  </h4>
  <p>
    Kafka combines three key capabilities so you can implement
    <a href="/powered-by">your use cases</a>
    for event streaming end-to-end with a single battle-tested solution:
  </p>
  <ol>
    <li>
      To <strong>publish</strong> (write) and <strong>subscribe to</strong> (read) streams of events, including continuous import/export of
      your data from other systems.
    </li>
    <li>
      To <strong>store</strong> streams of events durably and reliably for as long as you want.
    </li>
    <li>
      To <strong>process</strong> streams of events as they occur or retrospectively.
    </li>
  </ol>
  <p>
    And all this functionality is provided in a distributed, highly scalable, elastic, fault-tolerant, and
    secure manner. Kafka can be deployed on bare-metal hardware, virtual machines, and containers, and on-premises
    as well as in the cloud. You can choose between self-managing your Kafka environments and using fully managed
    services offered by a variety of vendors.
  </p>

  <h4 class="anchor-heading">
    <a class="anchor-link" id="intro_nutshell" href="#intro_nutshell"></a>
    <a href="#intro_nutshell">How does Kafka work in a nutshell?</a>
  </h4>
  <p>
    Kafka is a distributed system consisting of <strong>servers</strong> and <strong>clients</strong> that
    communicate via a high-performance <a href="/protocol.html">TCP network protocol</a>.
    It can be deployed on bare-metal hardware, virtual machines, and containers in on-premise as well as cloud
    environments.
  </p>
  <p>
    <strong>Servers</strong>: Kafka is run as a cluster of one or more servers that can span multiple datacenters
    or cloud regions. Some of these servers form the storage layer, called the brokers. Other servers run
    <a href="/documentation/#connect">Kafka Connect</a> to continuously import and export
    data as event streams to integrate Kafka with your existing systems such as relational databases as well as
    other Kafka clusters. To let you implement mission-critical use cases, a Kafka cluster is highly scalable
    and fault-tolerant: if any of its servers fails, the other servers will take over their work to ensure
    continuous operations without any data loss.
  </p>
  <p>
    <strong>Clients</strong>: They allow you to write distributed applications and microservices that read, write,
    and process streams of events in parallel, at scale, and in a fault-tolerant manner even in the case of network
    problems or machine failures. Kafka ships with some such clients included, which are augmented by
    <a href="https://cwiki.apache.org/confluence/display/KAFKA/Clients">dozens of clients</a> provided by the Kafka
    community: clients are available for Java and Scala including the higher-level
    <a href="/documentation/streams/">Kafka Streams</a> library, for Go, Python, C/C++, and
    many other programming languages as well as REST APIs.
  </p>

  <h4 class="anchor-heading">
    <a class="anchor-link" id="intro_concepts_and_terms" href="#intro_concepts_and_terms"></a>
    <a href="#intro_concepts_and_terms">Main Concepts and Terminology</a>
  </h4>
  <p>
    An <strong>event</strong> records the fact that "something happened" in the world or in your business. It is also called record or message in the documentation. When you read or write data to Kafka, you do this in the form of events. Conceptually, an event has a key, value, timestamp, and optional metadata headers. Here's an example event:
  </p>
  <ul>
    <li>
      Event key: "Alice"
    </li>
    <li>
      Event value: "Made a payment of $200 to Bob"
    </li>
    <li>
      Event timestamp: "Jun. 25, 2020 at 2:06 p.m."
    </li>
  </ul>
  <p>
    <strong>Producers</strong> are those client applications that publish (write) events to Kafka, and <strong>consumers</strong> are those that subscribe to (read and process) these events. In Kafka, producers and consumers are fully decoupled and agnostic of each other, which is a key design element to achieve the high scalability that Kafka is known for. For example, producers never need to wait for consumers. Kafka provides various <a href="/documentation/#intro_guarantees">guarantees</a> such as the ability to process events exactly-once.
  </p>
  <p>
    Events are organized and durably stored in <strong>topics</strong>. Very simplified, a topic is similar to a folder in a filesystem, and the events are the files in that folder. An example topic name could be "payments". Topics in Kafka are always multi-producer and multi-subscriber: a topic can have zero, one, or many producers that write events to it, as well as zero, one, or many consumers that subscribe to these events. Events in a topic can be read as often as needed—unlike traditional messaging systems, events are not deleted after consumption. Instead, you define for how long Kafka should retain your events through a per-topic configuration setting, after which old events will be discarded. Kafka's performance is effectively constant with respect to data size, so storing data for a long time is perfectly fine.
  </p>
  <p>
    Topics are <strong>partitioned</strong>, meaning a topic is spread over a number of "buckets" located on different Kafka brokers. This distributed placement of your data is very important for scalability because it allows client applications to both read and write the data from/to many brokers at the same time. When a new event is published to a topic, it is actually appended to one of the topic's partitions. Events with the same event key (e.g., a customer or vehicle ID) are written to the same partition, and Kafka <a href="/documentation/#intro_guarantees">guarantees</a> that any consumer of a given topic-partition will always read that partition's events in exactly the same order as they were written.
  </p>
  <figure class="figure">
    <img src="/images/streams-and-tables-p1_p4.png" class="figure-image" />
    <figcaption class="figure-caption">
      Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing,
      independently from each other, new events to the topic by writing events over the network to the topic's
      partitions. Events with the same key (denoted by their color in the figure) are written to the same
      partition. Note that both producers can write to the same partition if appropriate.
    </figcaption>
  </figure>
  <p>
    To make your data fault-tolerant and highly-available, every topic can be <strong>replicated</strong>, even across geo-regions or datacenters, so that there are always multiple brokers that have a copy of the data just in case things go wrong, you want to do maintenance on the brokers, and so on. A common production setting is a replication factor of 3, i.e., there will always be three copies of your data. This replication is performed at the level of topic-partitions.
  </p>
  <p>
    This primer should be sufficient for an introduction. The <a href="/documentation/#design">Design</a> section of the documentation explains Kafka's various concepts in full detail, if you are interested.
  </p>

  <h4 class="anchor-heading">
    <a class="anchor-link" id="intro_apis" href="#intro_apis"></a>
    <a href="#intro_apis">Kafka APIs</a>
  </h4>
  <p>
    In addition to command line tooling for management and administration tasks, Kafka has five core APIs for Java and Scala:
  </p>
  <ul>
    <li>
      The <a href="/documentation.html#adminapi">Admin API</a> to manage and inspect topics, brokers, and other Kafka objects.
    </li>
    <li>
      The <a href="/documentation.html#producerapi">Producer API</a> to publish (write) a stream of events to one or more Kafka topics.
    </li>
    <li>
      The <a href="/documentation.html#consumerapi">Consumer API</a> to subscribe to (read) one or more topics and to process the stream of events produced to them.
    </li>
    <li>
      The <a href="/documentation/streams">Kafka Streams API</a> to implement stream processing applications and microservices. It provides higher-level functions to process event streams, including transformations, stateful operations like aggregations and joins, windowing, processing based on event-time, and more. Input is read from one or more topics in order to generate output to one or more topics, effectively transforming the input streams to output streams.
    </li>
    <li>
      The <a href="/documentation.html#connect">Kafka Connect API</a> to build and run reusable data import/export connectors that consume (read) or produce (write) streams of events from and to external systems and applications so they can integrate with Kafka. For example, a connector to a relational database like PostgreSQL might capture every change to a set of tables. However, in practice, you typically don't need to implement your own connectors because the Kafka community already provides hundreds of ready-to-use connectors.
    </li>
  </ul>

  <!-- TODO: add new section once supporting page is written -->

  <h4 class="anchor-heading">
    <a class="anchor-link" id="intro_more" href="#intro_more"></a>
    <a href="#intro_more">Where to go from here</a>
  </h4>
  <ul>
    <li>
      To get hands-on experience with Kafka, follow the <a href="/quickstart">Quickstart</a>.
    </li>
    <li>
      To understand Kafka in more detail, read the <a href="/documentation/">Documentation</a>.
      You also have your choice of <a href="/books-and-papers">Kafka books and academic papers</a>.
    </li>
    <li>
      Browse through the <a href="/powered-by">Use Cases</a> to learn how other users in our world-wide community are getting value out of Kafka.
    </li>
    <li>
      Join a <a href="/events">local Kafka meetup group</a> and
      <a href="https://kafka-summit.org/past-events/">watch talks from Kafka Summit</a>, the main conference of the Kafka community.
    </li>
  </ul>
</script>

<div class="p-introduction"></div>
