Kafkaの主なAPIを列挙しなさい。コンマで区切ってください。
Kafkaは、プロデューサーと呼ばれる任意の数のプロセスから送られてくるKey-Valueメッセージを保存する。データは、異なる "トピック "内の異なる "パーティション "に分割することができる。パーティション内では、メッセージはオフセット（パーティション内でのメッセージの位置）によって厳密に並べられ、インデックスが付けられ、タイムスタンプとともに保存される。コンシューマー」と呼ばれる他のプロセスは、パーティションからメッセージを読み取ることができる。ストリーム処理のために、Kafkaは、Kafkaからデータを消費し、結果をKafkaに書き戻すJavaアプリケーションを書くことを可能にするStreams APIを提供している。Apache Kafkaは、Apache Apex、Apache Beam、Apache Flink、Apache Spark、Apache Storm、Apache NiFiといった外部のストリーム処理システムとも連携する。

Kafkaは1台以上のサーバー（ブローカーと呼ばれる）からなるクラスタ上で実行され、すべてのトピックのパーティションはクラスタノードに分散される。さらに、パーティションは複数のブローカーに複製される。このアーキテクチャにより、Kafkaはフォールトトレラントな方法で大量のメッセージストリームを配信できるようになり、Java Message Service（JMS）やAdvanced Message Queuing Protocol（AMQP）などの従来のメッセージングシステムを置き換えることができるようになった。0.11.0.0リリース以降、Kafkaはトランザクション書き込みを提供し、Streams APIを使用して、正確に1回だけのストリーム処理を提供する。

Kafkaは2種類のトピックをサポートしている：通常のトピックとコンパクト化されたトピックです。通常のトピックは、保持時間またはスペースバウンドで設定できます。指定された保持時間よりも古いレコードがある場合、またはパーティションのスペースバウンドを超えた場合、Kafkaはストレージスペースを解放するために古いデータを削除することができます。デフォルトでは、トピックの保存期間は7日間ですが、データを無期限に保存することも可能です。コンパクト化されたトピックの場合、レコードは時間や容量の境界に基づいて期限切れになることはありません。その代わり、Kafkaは後のメッセージを同じキーを持つ古いメッセージの更新として扱い、キーごとに最新のメッセージを削除しないことを保証する。ユーザーは、特定のキーに対してNULL値を持つ、いわゆる墓石メッセージを書くことで、メッセージを完全に削除することができる。

Kafkaには5つの主要なAPIがある：

Producer API - アプリケーションがレコードのストリームを公開することを許可する。
Consumer API - アプリケーションがトピックを購読し、レコードのストリームを処理することを許可する。
Connector API - 既存のアプリケーションにトピックをリンクできる、再利用可能なプロデューサーAPIとコンシューマーAPIを実行する。
Streams API - 入力ストリームを出力に変換し、結果を生成します。
Admin API - Kafkaトピック、ブローカー、その他のKafkaオブジェクトを管理する。
コンシューマーAPIとプロデューサーAPIは、基盤となるメッセージングプロトコルによってKafkaのコア機能から切り離されている。これにより、KafkaにバンドルされているJava APIと同様に効率的な互換性のあるAPIレイヤーを任意のプログラミング言語で記述できる。Apache Kafkaプロジェクトは、そのようなサードパーティAPIのリストを管理している。
プロデューサーAPI、コンシューマーAPI、コネクターAPI、ストリームAPI、管理者API