628 Views
September 28, 20
スライド概要
https://japan-pulsar-user-group.connpass.com/event/141000/
2023年10月からSpeaker Deckに移行しました。最新情報はこちらをご覧ください。 https://speakerdeck.com/lycorptech_jp
OpenWhiskのMQをKafkaからPulsarに 変えてみた件 2019年9月4日 ヤフー株式会社 テクノロジーグループシステム統括本部クラウドプラット フォーム本部 技術3部 藤社陽実 YAHOO! JAPAN Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
自己紹介 名前:藤社陽実 2017/7以前:ゲーム会社~ SIerを経験 2017/7~ : ヤフー株式会社に 入社 FaaSを扱う部署に配属 2
アジェンダ • Apache OpenWhiskとは • KafkaからPulsarに変えてみた件 • 変えてみた結果どうだった? 3
Apache OpenWhiskとは YAHOO! JAPAN Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
Apache OpenWhiskとは • 分散型サーバレスクラウドプラットフォーム • イベントドリブン型のプログラミングサービス • 任意の言語でFunctionを書くことができる • https://github.com/apache/openwhisk/ APACHE OpenWhisk TM 5
Apache OpenWhiskの構成 Apache OpenWhiskの構成を説明します。 Controller kafka Invoker Invoker Invoker ... Controller・・・イベントの受信 Invoker・・・処理の実行 転載元:https://github.com/apache/openwhisk/ 6
Apache OpenWhiskの構成 Controller PULSAR Invoker Invoker Invoker ... 変えてみたのは ここ Controller・・・イベントの受信 Invoker・・・処理の実行 転載元:https://github.com/apache/openwhisk/ 7
KafkaからPulsarに変えてみた件 YAHOO! JAPAN Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
前提について • 社内ではPulsarを中央管理しているチームがいる • MQに対する知見があまりない 9
課題について • Kafkaの管理が大変だった • 開発業務に集中したい 10
参考にした資料 • 「Pulsar adaptor for Apache Kafka」を元に進めていく • https://pulsar.apache.org/docs/en/adaptors-kafka PULSAR 2.4.0 Docs Download Clients REST APIs Blog Community Apache Adaptors Kafka client wrapper Apache Spark Apache Storm Cookbooks Tiered Storage Topic compaction Message deduplication Non-persistent messaging Partitioned Topics Message retention and expiry Encryption Message queue BookKeeper Ledger Metadata Pulsar adaptor for Apache Kafka EDIT Pulsar provides an easy option for applications that are currently written using the Apache Kafka Java client API. Using the Pulsar Kafka compatibility wrapper In an existing application, change the regular Kafka client dependency and replace it with the Pulsar Kafka wrapper. Remove the following dependency in pom.xml: <dependency> <groupId>org.apache.kafka</groupId> <artifactId>kafka-clients</artifactId> <version>0.10.2.1</version> </dependency> Copy 11
参考にした項目 • Using the Pulsar Kafka compatibility wrapper • Producer example • Compatibility matrix • Pulsar client properties • Pulsar producer properties 12
調べてみた • 簡単に差し替えはできないか? ➢ Pulsar-client-kafkaをビルドの依存に追加するだけで Pulsarに差し替えられそうだった <dependency> <groupId>org.apache.pulsar</groupId> <artifactId>pulsar-client-kafka</artifactId> <version>2.4.0</version> </dependency> 13
調べてみた • Openwhiskで呼ばれているメソッドで非サポートのものが ないか? Producer OpenWhiskで使っているメソッド Supported Future<RecordMetadata> send(ProducerRecord<K, V> record, Callback callback) Yes void close() Yes Consumer OpenWhiskで使っているメソッド Supported void subscribe(Collection<String> topics) Yes void wakeup() No void close() Yes 14
調べてみた
• Produceする時のパラメータで差し替えが必要なのか?
➢ URLをトピック名に差し替える
String topic = "persistent://public/default/my-topic";
Properties props = new Properties();
// Point to a Pulsar service
props.put("bootstrap.servers", "pulsar://localhost:6650");
props.put("key.serializer", IntegerSerializer.class.getName());
props.put("value.serializer", StringSerializer.class.getName());
Producer<Integer, String> producer = new KafkaProducer<>(props);
for (int i = 0; i < 10; i++) {
producer.send(new ProducerRecord<Integer, String>(topic, i, "hello-" + i));
15
調べてみた • 挙動の差異はないか? ➢ Pulsarはトピックを自動で作成する ➢ namespaceごとに設定を行うためトピックごとに 指定して作成することがない 16
調べてみた • 設定に差異があったりしないか? ➢ Kafkaのオプションは一部不要なものもあったが無視 されるので問題はなし ➢ pulsar-client-kafkaで必要なオプションはなかった Producer/Consumer Config property Supported Producer request.timeout.ms Ignored metadata.max.age.ms Ignored Consumer session.timeout.ms Ignored heartbeat.interval.ms Ignored enable.auto.commit Yes auto.offset.reset Yes max.poll.interval.ms Ignored fetch.max.wait.ms Ignored 17
試した結果 • ビルドの依存にpulsar-client-kafkaを追加する • KafkaのURLをトピック名に差し替える • wakeupを呼ぶのをやめる • コード内でトピックの生成をやめる • Pulsarのオプションの追加は不要だった 実際に軽微な修正で移行ができた。 18
変えてみた結果どうだった? YAHOO! JAPAN Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.
変えてみた結果どうだった? • KafkaからPulsarに簡単に変更ができた • Pulsarに切り替えてもKafkaと遜色はなかった 補足 • ScalaやJavaを使っていればKafkaから別なMQへの乗り 換えはAdaptorを実装すれば簡単にできる • 自分たちが管理しているコンポーネントが減って運用が 楽になった 20
ご清聴ありがとうございました YAHOO! JAPAN Copyright (C) 2019 Yahoo Japan Corporation. All Rights Reserved.