ApacheKafka以降

投稿日:

(2019年6月13日)

Apache Kafkaとは何ですか?

Apache Kafkaは、元々分散型の公開/サブスクライブベースの追加専用メッセージングプラットフォームです。 LinkedIn によって開発され、後で ApacheFoundationに寄贈されました

(*画像は美化用です)

ユースケース

  • メッセージング
  • ログ集約
  • ストリーム処理
  • コミットログ
  • イベントソーシングなど

どのように機能しますか?

Kafkaはpub-subモデルで機能します。したがって、消費者/消費者グループと発行者が存在します。

プロデューサーは特定のトピックにデータを公開し、トピックにサブスクライブしているコンシューマーはデータを消費します。複数のプロデューサーが同じトピックに公開できますが、一度に1つのコンシューマーのみがトピックのデータを消費できます。

ここで、1つだけかどうかを尋ねることができます。消費者は一度にトピックから消費することが許可されており、何千ものイベントが来る場合、どのようにそれらをスケーリングしますか?

わかりました。その場合、トピックをパーティションに分割してスケーラビリティを実現できます。

トピックのパーティション分割を行う場合、パーティション内の各メッセージにはoffset\_id / message\_idがあります。左の写真では、3つのパーティションを作成し、各プロデューサーが特定のパーティションにイベントを送信します。そして、コンシューマーは特定のパーティションから読み取ります。 300イベント/秒が送信されている場合、3つに分割されるため、各パーティションには100メッセージ/秒が含まれます。このようにして、負荷分散を実現できます。 パーティションを作成する場合、Kafkaはパーティションレベルのメッセージの順序のみを保証しますパーティショニングで順序を達成するには、キーを使用する必要があります。

イベントが増加した場合は、パーティションを増やし、コンシューマーを追加してスケーリングし、負荷分散を実現する必要があります。 。

イベントを受信したら、ログをKafkaにコミットする必要があるため、Kafkaはイベントが処理されたことを理解し、Kafkaはそれを再度送信しません。アプリがクラッシュした場合、Kafkaはそのイベントを再度送信して処理します。

レプリケーション係数:

レプリケーション係数は、KafkaのデータがさまざまなKafkaブローカーでレプリケートされる方法です。レプリケーション係数N = 3を選択したとすると、データはさらに2つのブローカーにレプリケートされます。したがって、N-1ブローカーがダウンしても、Kafkaは引き続き機能します。これは、データを維持するためにデータを保持しているブローカーが少なくとも1つ存在するためです。

Apache Zookeeper?

Apache Zookeeperは、分散構成サービス、同期を提供するために使用される、階層型Key-Valueストアへの分散システム向けの一元化されたサービスです。大規模な分散システムのサービス、およびネーミングレジストリ。 Apache Kafkaは、Zookeeperなしでは機能しません。 Kafkaクラスター管理、ブローカーが起動または停止した場合、新しいトピックが作成された場合…。このタイプのデータは、Zookeeperを介して別のKafkaブローカーと同期されます。

Spinup Kafka>

docker-compose up

消費者(Golang)>

プロデューサー(Kotlin)>

結果>

Waiting for messages...Topic : users.notification
Partition : 0
Offset : 1
Value : hello

リソース:

1. github.com/confluentinc/confluent-kafka-go
2. compile group: "io.opentracing.contrib", name: "opentracing-kafka-client", version: "0.1.2"

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です