Apache Kafka主要元素3


🔶 Producer


🚩メッセージ構造:Header、Key、Value



#Producer Sample Code(Serializer)
#Key와 Value용 Serializer를 각각 설정

private Proerties props = new Prolerties();

props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "broker101:9092, broker102:9092");
props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, org.apache.kafka.commom.serializtion.StringSerializer.class);
props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, io.confluent.kafka.serializers.KafkaAvroSerializer.class);

KafkaProducer producer = new KafkaProducer(props);

🚩 Partitioner

  • は、メッセージをTopicのどのパーティション
  • に送信するかを決定する.
  • 前提条件はKeyがnullにならないことです

    Apache Kafka Producer Improvement with the Sticky Partitioner*
  • https://www.confluent.io/blog/apache-kafka-producer-improvements-sticky-partitioner/
  • Kafka2.4以前のDefaultParifierはRound Robinポリシー、動作
  • Kafka2.4以降のDefaultParifierは、Stickyポリシーを使用してレコードをパーティションに送信し、アクションのバックアップがオフになるまでランダムにパーティションを選択します.

    🔶 Consumer


  • Consumer自身の速度でCommit Logから
  • を順番に読み出す.
  • 異なるConsumer Groupに属するConsumerは互いに関係なく、Commit Logのイベントを同時に異なる場所で再放送することができる
  • Consumerは、
  • の再読み込みを防止するために、自動または手動でデータを読み出す位置をコミットする.
  • consumer offsetという名前の内部TopicでConsumer Offsetを保存および管理する
  • 🚩 Consuming as a Group



    1つのConsumer Groupに4つのConsumerがある場合、各Consumerは1つのパーティションでレコードを使用し、Topicは
  • 4のパーティションを使用します.
  • Parationは、常にConsumerグループの1つのConsumerのみが
  • を使用します.
  • Consumerは、所与のTopic上で0個以上のパーティション
  • を使用することができる
    Consumer Rebalancing
  • に属するConsumerグループのConsumerが死亡した場合、そのグループに属するConsumerはParitionを分解し、
  • を消費する.
  • パーティションは、常にConsumerグループの1つのConsumerによって
  • のみ使用されます.
  • Consumerは、所与のTopic上で0個以上のパーティション
  • を使用することができる

    🚩 Multi Consumer Group


  • 同じグループです.idからなるすべてのConsumerからなる1つのConsumerグループ
  • Consumer GroupのConsumerはワークロードをある程度に分けます-
  • 同じTopicで使用されるConsumerグループ
  • が複数存在する場合がある
  • 他のConsumer GroupのConsumerは独立した
  • です.