Günümüzün işletmeleri veri hacminde benzeri görülmemiş bir büyüme ile karşı karşıyadır. Verilerin giderek artan bir kısmı, IoT cihazları, web siteleri, iş uygulamaları ve diğer çeşitli kaynaklar tarafından gerçek zamanlı olarak üretiliyor. İşletmelerin, gerçek zamanlı iş kararları verebilmek için bu verileri ulaşır ulaşmaz işlemesi ve analiz etmesi gerekir. Apache Kafka için Amazon Tarafından Yönetilen Akış (Amazon MSK), verileri gerçek zamanlı olarak toplamak ve işlemek için Apache Kafka'yı kullanan akış işleme uygulamalarının oluşturulmasına ve çalıştırılmasına olanak tanıyan, tam olarak yönetilen bir hizmettir.
Apache Kafka kullanan akış işleme uygulamaları birbirleriyle doğrudan iletişim kurmaz; Kafka konuları üzerinden mesaj gönderip alarak iletişim kurarlar. Akış işleme uygulamalarının verimli ve güvenli bir şekilde iletişim kurabilmesi için, nitelikler ve veri türleri açısından bir mesaj veri yükü yapısının tanımlanması gerekir. Bu yapı, mesaj gönderip alırken kullanılan şema uygulamalarını açıklar. Ancak çok sayıda üretici ve tüketici uygulamasında şemadaki küçük bir değişiklik bile (bir alanın kaldırılması, yeni bir alanın eklenmesi veya veri türünde değişiklik) aşağı akış uygulamalarında hata ayıklaması ve düzeltilmesi zor sorunlara neden olabilir.
Geleneksel olarak ekipler, birbirlerini veri şeması değişiklikleri hakkında bilgilendirmek için değişiklik yönetimi süreçlerinden (onaylar ve bakım pencereleri gibi) veya diğer resmi olmayan mekanizmalardan (belgeler, e-postalar, işbirliği araçları vb.) yararlanır. Ancak bu mekanizmalar ölçeklenmez ve hatalara açıktır. AWS Tutkal Şeması Kayıt Defteri akış işleme uygulamalarına yönelik şemaları merkezi olarak yayınlamanıza, keşfetmenize, kontrol etmenize, doğrulamanıza ve geliştirmenize olanak tanır. İle AWS Tutkal Şeması Kayıt Defterikullanarak veri akışı uygulamalarındaki şemaları yönetebilir ve uygulayabilirsiniz. Apache KafkaAmazon MSK, Amazon Kinesis Veri Akışları, Apache Flink için Amazon Kinesis Veri Analizi, ve AWS Lambda.
Bu gönderi, Apache Kafka akış işleme uygulamalarının, bir iletiyi kullanarak iletileri nasıl doğruladığını gösterir. Apaçi Avro şemada saklandı AWS Glue Schema kaydı merkezi bir AWS hesabında ikamet ediyor. biz kullanıyoruz AWS Glue Schema Registry SerDe kitaplığı ve Avro SpecificRecord
Amazon MSK kümesindeki bir Kafka konusundan mesaj gönderip alırken akış işleme uygulamalarındaki mesajları doğrulamak için. Bu yazı için Avro şemasını kullansak da aynı yaklaşım ve konsept JSON şemaları için de geçerlidir.
Kullanım örneği
Tek boynuzlu at gezileri sunan hayali bir araç paylaşımı şirketini varsayalım. Eyleme geçirilebilir bilgiler elde etmek için, tek boynuzlu ata binme isteği mesajlarının akışını işlemeleri gerekiyor. Yolculukların çok popüler olmasını bekliyorlar ve çözümlerinin ölçeklenebilir olduğundan emin olmak istiyorlar. Ayrıca tüm akış ve operasyon verilerinin analiz için saklandığı merkezi bir veri gölü de inşa ediyorlar. Müşteri takıntılıdırlar, bu nedenle gelecekteki yolculuklara tek boynuzlu atınızın saç rengini seçmek gibi yeni eğlenceli özellikler eklemeyi bekliyorlar ve bu özellikleri yolculuk isteği mesajlarına yansıtmaları gerekecek. Gelecekteki şema değişiklikleri nedeniyle aşağı akış uygulamalarında sorunları önlemek için, mesajları merkezi bir şema kayıt defterinde barındırılan bir şema ile doğrulayacak bir mekanizmaya ihtiyaçları vardır. Şemaların merkezi bir şema kaydında bulunması, uygulama ekiplerinin şemaları tek bir yerde yayınlamasını, doğrulamasını, geliştirmesini ve bakımını yapmasını kolaylaştırır.
Çözüme genel bakış
Şirket, tek boynuzlu ata binme isteği mesajlarını geniş ölçekte yakalamak ve dağıtmak için Amazon MSK'yı kullanıyor. Zengin veri yapıları sağlaması, JSON'a doğrudan eşlemeyi desteklemesi ve kompakt, hızlı ve ikili veri formatını desteklemesi nedeniyle tek boynuzlu yolculuk istekleri için bir Avro şeması tanımlarlar. Şema üzerinde önceden anlaşmaya varıldığı için Avro'yu kullanmaya karar verdiler SpecificRecord.SpecificRecord
Avro kütüphanesinden bir Avro kaydının POJO olarak kullanılmasına izin veren bir arayüzdür. Bu, şemadan bir Java sınıfı (veya sınıfları) oluşturularak yapılır. avro-maven-plugin
. Onlar kullanırlar AWS Kimlik ve Erişim Yönetimi (BEN) hesaplar arası roller diğer AWS hesabındaki üretici ve tüketici uygulamalarının merkezi Schema Registry hesabındaki şemalara güvenli ve güvenli bir şekilde erişmesine izin vermek.
AWS Glue Schema Registry, Hesap B'de yer alırken, MSK kümesi ile Kafka üretici ve tüketici uygulamaları Hesap A'dadır. AWS Glue Schema Registry'ye hesaplar arası erişimi etkinleştirmek için aşağıdaki iki IAM rolünü kullanıyoruz. AWS Glue Schema Registry'nin kaynak tabanlı politikaları desteklememesi nedeniyle A Hesabındaki Apache Kafka istemcileri, kimlik tabanlı bir politika kullanarak B Hesabında bir rol üstlenir.
- Hesap A IAM rolü – Üretici ve tüketici uygulamalarının Hesap B'de bir IAM rolü üstlenmesine olanak tanır.
- B Hesabı IAM rolü – A Hesabındaki tüm IAM sorumlularına güvenir ve B Hesabındaki AWS Glue Schema Kayıt Defterinde okuma eylemleri gerçekleştirmelerine izin verir. Gerçek bir kullanım senaryosunda, hesaplar arası rolleri üstlenebilen IAM sorumlularının kapsamı daha spesifik olarak belirlenmelidir.
Aşağıdaki mimari diyagram çözümü göstermektedir:
Çözüm şu şekilde çalışır:
- Hesap A'da çalışan bir Kafka üreticisi, Hesap B'de hesaplar arası Şema Kayıt Defteri IAM rolünü şu çağrıyı yaparak üstlenir: AWS Security Token Hizmeti (AWS STS)
assumeRole
API. - Kafka üreticisi, tek boynuzlu at sürüş isteği POJO'ya gömülü şema için AWS Glue Schema Registry'den tek boynuzlu at sürüş isteği Avro şema sürüm kimliğini alır. Şema sürüm kimliğinin getirilmesi, AWS Glue Schema Registry SerDe'nin serileştiricisi tarafından dahili olarak yönetilir. Seri hale getiricinin Kafka üretici konfigürasyonunun bir parçası olarak yapılandırılması gerekir.
- Şema AWS Glue Schema Registry'de mevcutsa seri hale getirici, veri kaydını şema sürüm kimliğiyle süsler ve ardından onu MSK kümesindeki Kafka konusuna teslim etmeden önce serileştirir.
- A Hesabında çalışan Kafka tüketicisi, AWS STS'yi çağırarak B Hesabında hesaplar arası Şema Kayıt Defteri IAM rolünü üstlenir.
assumeRole
API. - Kafka tüketicisi, veri kayıtları için MSK kümesinde Kafka konusunu yoklamaya başlar.
- Kafka tüketicisi, tek boynuzlu at yolculuğu isteği Avro şemasını AWS Glue Schema Registry'den alır ve tek boynuzlu at yolculuğu isteği veri kaydında kodlanan şema sürüm kimliğiyle eşleşir. Şema getiriliyor
a, AWS Glue Schema Registry SerDe'nin seri durumdan çıkarma aracı tarafından dahili olarak yönetilir. Seri durumdan çıkarıcının Kafka tüketici yapılandırmasının bir parçası olarak yapılandırılması gerekir. Şema, AWS Glue Schema Registry'de mevcutsa seri durumdan çıkarıcı, tüketicinin bunu işlemesi için veri kaydını unicorn sürüş isteği POJO'ya seri durumdan çıkarır.
AWS Glue Schema Registry SerDe kitaplığı, veri aktarımlarından tasarruf etmek için isteğe bağlı sıkıştırma yapılandırmasını da destekler. Şema Kaydı hakkında daha fazla bilgi için bkz. Şema Kaydı nasıl çalışır?.
Tek boynuzlu at sürüş isteği Avro şeması
Aşağıdaki şema (UnicornRideRequest.avsc
), müşteri özellikleri ve sistem tarafından önerilen tek boynuzlu at niteliklerinin yanı sıra yolculuk isteği niteliklerini içeren, tek boynuzlu at yolculuğu talebini temsil eden bir kaydı tanımlar:
Önkoşullar
Bu çözümü kullanmak için iki AWS hesabınızın olması gerekir:
- Hesap A – MSK kümesi için Kafka üreticisi ve tüketicisi Amazon Elastik Bilgi İşlem Bulutu (Amazon EC2) bulut sunucuları ve AWS Bulut9 çevre
- Hesap B – Şema Kaydı ve şema için
Bu çözüm için Bölgeyi kullanıyoruz us-east-1
, ancak bunu gereksinimlerinize göre değiştirebilirsiniz.
Daha sonra, her hesaptaki kaynakları aşağıdakileri kullanarak oluştururuz: AWS CloudFormation şablonlar.
Hesap B'de kaynak oluşturun
B Hesabında aşağıdaki kaynakları oluşturuyoruz:
- Bir şema kaydı
- Bir Avro şeması
- Bir IAM rolü
AWSGlueSchemaRegistryReadonlyAccess
yönetilen politika ve tüm A Hesabı IAM sorumlularının bunu üstlenmesine olanak tanıyan bir örnek profili - The
UnicornRideRequest.avsc
CloudFormation şablonunda şema tanımı olarak kullanılan, daha önce gösterilen Avro şeması
Bu kaynakları oluşturmak için uygun izinlere sahip olduğunuzdan emin olun.
- B Hesabına giriş yapın.
- Aşağıdakileri başlatın CloudFormation yığını.
- İçin Yığın adı, girmek
SchemaRegistryStack
. - İçin Şema Kayıt Defteri adı, girmek
unicorn-ride-request-registry
. - İçin Avro Şema adı, girmek
unicorn-ride-request-schema-avro
. - Kafka istemcisinin AWS hesap kimliği için Hesap A Kimliğinizi girin.
- İçin Harici Kimlikbenzersiz bir rastgele kimlik girin (örneğin,
demo10A
), bu hesapta IAM rolünü üstlenirken Hesap A'daki Kafka müşterileri tarafından sağlanmalıdır.
Hesaplar arası güvenlik hakkında daha fazla bilgi için bkz. Karışık milletvekili sorunu.
- Yığın tamamlandığında, Çıkışlar yığının sekmesindeki değeri kopyalayın
CrossAccountGlueSchemaRegistryRoleArn
.
Hesap A'da oluşturulan Kafka üretici ve tüketici uygulamaları, Hesap B'deki Şema Kaydına ve şemaya erişmek için bu rolü üstlenir.
- Kaynakların oluşturulduğunu doğrulamak için AWS Glue konsolunda şunu seçin: Şema kayıtları Gezinme çubuğunda ve bulun
unicorn-ride-request-registry
. - Kayıt defterini seçin
unicorn-ride-request-registry
ve içerdiğini doğrulayınunicorn-ride-request-schema-avro
içinde Şemalar Bölüm. - İçeriğini görmek için şemayı seçin.
Tarafından oluşturulan IAM rolü SchemaRegistryStack
yığın, tüm A Hesabı IAM sorumlularının bunu üstlenmesine ve AWS Glue Schema Registry'de okuma eylemleri gerçekleştirmesine olanak tanır. IAM rolünün güven ilişkilerine bakalım.
- Üzerinde
SchemaRegistryStack
yığın Çıkışlar sekmesi, değerini kopyalayınCrossAccountGlueSchemaRegistryRoleName
. - IAM konsolunda bu rolü arayın.
- Klinik Güven ilişkileri ve A Hesabının listelendiğini doğrulamak için güvenilir varlıklarına bakın.
- içinde Koşullar bölümünde bunu onaylayın
sts:ExternalId
Yığın oluşturma sırasında sağlanan aynı benzersiz rastgele kimliğe sahiptir.
A Hesabında kaynak oluşturun
A Hesabında aşağıdaki kaynakları oluşturuyoruz:
- Bir VPC
- Kafka üreticisi ve tüketicisi için EC2 bulut sunucuları
- Bir AWS Cloud9 ortamı
- MSK kümesi
Ön koşul olarak, EC2 bulut sunucularına SSH yapabilmek için bir EC2 anahtar çifti oluşturun ve bunu makinenize indirin. Ayrıca bir oluştur MSK kümesi yapılandırması varsayılan değerlerle. CloudFormation'ı oluşturmak için izinlere sahip olmanız gerekir
yığın, EC2 bulut sunucuları, AWS Cloud9 ortamı, MSK kümesi, MSK kümesi yapılandırması ve IAM rolü.
- A Hesabına giriş yapın.
- Aşağıdakileri başlatın CloudFormation yığını VPC, EC2 bulut sunucularını ve AWS Cloud9 ortamını başlatmak için.
- İçin Yığın adı, girmek
MSKClientStack
. - VPC ve alt ağ CIDR aralıklarını sağlayın.
- İçin EC2 Anahtar Çiftimevcut bir EC2 anahtar çiftini seçin.
- En son EC2 AMI Kimliği için varsayılan seçeneği seçin.
- Hesaplar arası IAM rolü ARN'si için şu değeri kullanın:
CrossAccountGlueSchemaRegistryRoleArn
(üzerinde mevcut Çıkışlar of tabSchemaRegistryStack
). - Yığın başarıyla oluşturulmasını bekleyin.
- Aşağıdakileri başlatın CloudFormation yığını MSK kümesini oluşturmak için.
- İçin Yığın adı, girmek
MSKClusterStack
. - Amazon MSK 2.7.1 sürümünü kullanın.
- MSK kümesi yapılandırması ARN'si için MSK kümesi yapılandırması ARN'sini girin. Önkoşulun bir parçası olarak oluşturduğunuz bir tane.
- MSK kümesi yapılandırması revizyon numarası için 1 girin veya sürümünüze göre değiştirin.
- İstemci CloudFormation yığın adı için şunu girin:
MSKClientStack
(bu yığından önce oluşturduğunuz yığın adı).
Kafka yapımcısını yapılandırma
Kafka üreticisinin merkezi AWS hesabındaki Şema Kaydına erişmesini yapılandırmak için aşağıdaki adımları tamamlayın:
- A Hesabına giriş yapın.
- AWS Cloud9 konsolunda şunu seçin:
Cloud9EC2Bastion
tarafından oluşturulan ortamMSKClientStack
yığını. - Üzerinde fileto menü seç Yerel Dosyaları Yükle.
- Yığını oluştururken daha önce kullandığınız EC2 anahtar çifti dosyasını yükleyin.
- Yeni bir terminal açın ve EC2 anahtar çifti izinlerini değiştirin:
- içine SSH
KafkaProducerInstance
EC2 örneğini seçin ve Bölgeyi gereksiniminize göre ayarlayın: - Ortam değişkenini ayarlayın
MSK_CLUSTER_ARN
MSK kümesinin ARN'sine işaret ederek:
Değiştir .ClusterName
MSK kümesi CloudFormation yığını için farklı bir ad kullandıysanız koddaki değer. Küme adı yığın adıyla aynıdır.
- Ortam değişkenini ayarlayın
BOOTSTRAP_BROKERS
önyükleme komisyoncularına işaret ederek: - Ortam değişkenlerini doğrulayın:
- adında bir Kafka konusu oluşturun
unicorn-ride-request-topic
Kafka üreticisi ve tüketici uygulamaları tarafından daha sonra kullanılan MSK kümenizde:
The MSKClientStack
yığın, Kafka yapımcı istemcisi JAR dosyasını kopyaladı kafka-cross-account-gsr-producer.jar
için KafkaProducerInstance
misal. MSK kümesindeki Kafka konusu unicorn-ride-request-topic'e mesaj gönderen Kafka yapımcı istemcisini içerir ve unicorn-ride-request-schema-avro
Avro şeması unicorn-ride-request-registry
Hesap B'deki şema kaydı. Bu yazının ilerleyen kısımlarında ele alacağımız Kafka yapımcı koduna şuradan ulaşılabilir: GitHub.
- Aşağıdaki komutları çalıştırın ve doğrulayın
kafka-cross-account-gsr-producer.jar
var: - Kafka yapımcısını çalıştırmak için aşağıdaki komutu çalıştırın.
KafkaProducerInstance
terminal:
Kod aşağıdaki parametrelere sahiptir:
- -bs -
$BOOTSTRAP_BROKERS
(MSK kümesi önyükleme aracıları) - -rn -
CrossAccountGlueSchemaRegistryRoleArn
değerSchemaRegistryStack
Hesap B'deki yığın çıktıları - -başlık – Kafka konusu
unicorn-ride-request-topic
- -reg -
us-east-1
(Bölgenize göre değiştirin, AWS STS uç noktası ve Şema Kaydı için kullanılır) - -nm:
500
(prodüktör uygulamasının Kafka konusuna gönderdiği mesaj sayısı) - -harici kimlik – Aynı harici kimlik (örneğin,
demo10A
) Hesap B'de CloudFormation yığınını oluştururken kullandığınız
Aşağıdaki ekran görüntüsünde Kafka yapımcı günlükleri gösterilmektedir: Schema Version Id received...
bu, Avro şemasını aldığı anlamına gelir unicorn-ride-request-schema-avro
Hesap B'den ve Hesap A'daki MSK kümesindeki Kafka konusuna iletiler gönderildi.
Kafka yapımcı kodu
Kafka yapımcı uygulamasının tamamı şu adreste mevcuttur: GitHub. Bu bölümde kodu parçalara ayırıyoruz.
getProducerConfig()
Aşağıdaki kodda gösterildiği gibi üretici özelliklerini başlatır:- VALUE_SERIALIZER_CLASS_CONFIG -
GlueSchemaRegistryKafkaSerializer.class.getName()
Veri kayıtlarını serileştiren AWS serileştirici uygulaması (uygulama şu adreste mevcuttur: GitHub) - REGISTRY_NAME – B Hesabındaki Şema Kaydı
- SCHEMA_NAME – Hesap B'deki şema adı
- AVRO_RECORD_TYPE -
AvroRecordType.SPECIFIC_RECORD
- VALUE_SERIALIZER_CLASS_CONFIG -
startProducer()
Hesap B'deki Şema Kaydına bağlanabilmek için B Hesabındaki rolü üstlenir ve MSK kümesindeki Kafka konusuna mesajlar gönderir:
assumeGlueSchemaRegistryRole()
aşağıdaki kodda gösterildiği gibi, Hesap B'de hesaplar arası Schema Registry IAM rolünü üstlenmek için AWS STS'yi kullanır. (Daha fazla bilgi için bkz. IAM'de geçici güvenlik kimlik bilgileri.) YanıtstsClient.assumeRole(roleRequest)
aşağıdakileri içeren geçici kimlik bilgilerini içerir:accessKeyId
,secretAccessKey
VesessionToken
. Daha sonra sistem özelliklerinde geçici kimlik bilgilerini ayarlar. Java için AWS SDK Schema Registry'ye erişirken (Schema Registry seri hale getirici aracılığıyla) bu kimlik bilgilerini kullanır. Daha fazla bilgi için bakınız Kimlik Bilgilerini Kullanma.createUnicornRideRequest()
oluşturmak için Avro şeması (tek boynuzlu at sürüş isteği şeması) tarafından oluşturulan sınıfları kullanır.SpecificRecord
. Bu yazı için, tek boynuzlu ata binme isteği öznitelik değerleri bu yöntemde sabit kodlanmıştır. Aşağıdaki koda bakın:
Kafka tüketicisini yapılandırma
The MSKClientStack
yığın oluşturdu KafkaConsumerInstance
Kafka tüketici uygulaması için örnek. Yığın tarafından oluşturulan tüm bulut sunucularını Amazon EC2 konsolunda görüntüleyebilirsiniz.
Kafka tüketicisinin merkezi AWS hesabındaki Şema Kayıt Defterine erişmesini yapılandırmak için aşağıdaki adımları tamamlayın:
- Yeni bir terminal açın
Cloud9EC2Bastion
AWS Cloud9 ortamı. - içine SSH
KafkaConsumerInstance
EC2 örneğini seçin ve Bölgeyi gereksiniminize göre ayarlayın: - Ortam değişkenini ayarlayın
MSK_CLUSTER_ARN
MSK kümesinin ARN'sine işaret ederek:
Değiştir .ClusterName
MSK kümesi CloudFormation yığını için farklı bir ad kullandıysanız değer. Küme adı yığın adıyla aynıdır.
- Ortam değişkenini ayarlayın
BOOTSTRAP_BROKERS
önyükleme komisyoncularına işaret ederek: - Ortam değişkenlerini doğrulayın:
The MSKClientStack
yığın, Kafka tüketici istemcisi JAR dosyasını kopyaladı. kafka-cross-account-gsr-consumer.jar
için KafkaConsumerInstance
misal. Kafka konusundaki mesajları okuyan Kafka tüketici istemcisini içerir. unicorn-ride-request-topic
MSK kümesinde bulunur ve unicorn-ride-request-schema-avro
Avro şeması unicorn-ride-request-registry
B Hesabındaki kayıt. Bu yazının ilerleyen kısımlarında ele alacağımız Kafka tüketici kodu şu adreste mevcuttur: GitHub.
- Aşağıdaki komutları çalıştırın ve doğrulayın
kafka-cross-account-gsr-consumer.jar
var: - Kafka tüketicisini çalıştırmak için aşağıdaki komutu çalıştırın.
KafkaConsumerInstance
terminal:
Kod aşağıdaki parametrelere sahiptir:
- -bs -
$BOOTSTRAP_BROKERS
(MSK kümesi önyükleme aracıları) - -rn -
CrossAccountGlueSchemaRegistryRoleArn
değerSchemaRegistryStack
Hesap B'deki yığın çıktıları - -başlık – Kafka konusu
unicorn-ride-request-topic
- -reg -
us-east-1
(Bölgenize göre değiştirin, AWS STS uç noktası ve Şema Kaydı için kullanılır) - -harici kimlik – Aynı harici kimlik (örneğin,
demo10A
) Hesap B'de CloudFormation yığınını oluştururken kullandığınız
Aşağıdaki ekran görüntüsü, Kafka tüketici günlüklerinin, Hesap A'daki MSK kümesindeki Kafka konusundaki mesajları başarıyla okuduğunu ve Avro şemasına eriştiğini göstermektedir. unicorn-ride-request-schema-avro
itibaren unicorn-ride-request-registry
B Hesabındaki şema kaydı.
Benzer günlükleri görüyorsanız, bu, hem Kafka tüketici uygulamalarının, Hesap B'deki merkezi Şema Kaydı ile başarılı bir şekilde bağlantı kurabildiği, hem de Hesap A'daki MSK kümesinden mesaj gönderip tüketirken mesajları doğrulayabildiği anlamına gelir.
Kafka tüketici kodu
Kafka tüketici uygulamasının tamamı şu adreste mevcuttur: GitHub. Bu bölümde kodu parçalara ayırıyoruz.
getConsumerConfig()
aşağıdaki kodda gösterildiği gibi tüketici özelliklerini başlatır:- VALUE_DESERİALIZER_CLASS_CONFIG -
GlueSchemaRegistryKafkaDeserializer.class.getName()
AWS seri durumdan çıkarıcı uygulaması,SpecificRecord
Şema Kayıt Defterindeki kodlanmış şema kimliğine göre (uygulama şu adreste mevcuttur: GitHub). - AVRO_RECORD_TYPE -
AvroRecordType.SPECIFIC_RECORD
- VALUE_DESERİALIZER_CLASS_CONFIG -
startConsumer()
Hesap B'deki Şema Kaydına bağlanabilmek için Hesap B'deki rolü üstlenir ve MSK kümesindeki Kafka konusundan gelen mesajları okur:
assumeGlueSchemaRegistryRole()
aşağıdaki kodda gösterildiği gibi, Hesap B'de hesaplar arası Schema Registry IAM rolünü üstlenmek için AWS STS'yi kullanır.stsClient.assumeRole(roleRequest)
aşağıdakileri içeren geçici kimlik bilgilerini içerir:accessKeyId
,secretAccessKey
VesessionToken
. Daha sonra sistem özelliklerinde geçici kimlik bilgilerini ayarlar. Java SDK'sı, Schema Registry'ye erişirken (Schema Registry serileştiricisi aracılığıyla) bu kimlik bilgilerini kullanır. Daha fazla bilgi için bakınız Kimlik Bilgilerini Kullanma.
Avro şema sınıflarını derleyin ve oluşturun
Uygulamanızı oluşturma ve dağıtmanın diğer tüm aşamalarında olduğu gibi, şema derlemesi ve Avro şema sınıfları oluşturma süreci de CI/CD ardışık düzeninize dahil edilmelidir. Avro şema sınıfları oluşturmanın birden fazla yolu vardır; kullanırız avro-maven-plugin
Bu yazı için. CI/CD işlemi ayrıca şunları kullanabilir: avro-tools
sınıflar oluşturmak için Avro şemasını derlemek. Aşağıdaki kod nasıl kullanabileceğinizi gösteren bir örnektir avro-tools
:
Uygulamaya genel bakış
Özetlemek gerekirse, merkezi data lake hesabı olan Hesap B'deki AWS Glue Schema Registry'de unicorn yolculuk istek mesajı için bir Avro şeması tanımlayıp kaydetmekle başlıyoruz. Hesap A'da, ilgili uygulama kodlarıyla birlikte bir MSK kümesi ve Kafka üreticisi ve tüketici EC2 örnekleri oluşturuyoruz (kafka-cross-account-gsr-consumer.jar
ve kafka-cross-account-gsr-producer.jar
) ve CloudFormation yığınını kullanarak bunlara konuşlandırın.
Üretici uygulamasını Hesap A'da çalıştırdığımızda serileştirici (GlueSchemaRegistryKafkaSerializer
) yapılandırma tek boynuzlu at sürüş isteği şemasını alırken sağlanan AWS Glue Schema Registry SerDe kitaplığından (UnicornRideRequest.avsc
) tek boynuzlu ata binme isteği mesajını serileştirmek için Hesap B'de bulunan merkezi Şema Kaydı'ndan. Hesap B ve Bölgede IAM rolünü (geçici kimlik bilgileri), şema kayıt defteri adını (unicorn-ride-request-registry
) ve şema adı (unicorn-ride-request-schema-avro
) merkezi Şema Kaydına bağlanmak için yapılandırma olarak sağlanır. Mesaj başarıyla serileştirildikten sonra yapımcı uygulaması onu Kafka konusuna (unicorn-ride-request-topic
) MSK kümesinde.
Tüketici uygulamasını Hesap A'da çalıştırdığımızda seri durumdan çıkarıcı (GlueSchemaRegistryKafkaDeserializer
) yapılandırma, Kafka konusundan okunan iletiden kodlanmış şema kimliğini çıkarırken sağlanan Schema Registry SerDe kitaplığından (unicorn-ride-request-topic
) ve aynı kimliğe ait şemayı B Hesabındaki merkezi Şema Kaydı'ndan alır. Daha sonra mesajı seri durumdan çıkarır. Merkezi Şema Kayıt Defterine bağlanmak için yapılandırma olarak sağlanan Hesap B'deki ve Bölgedeki IAM rolünü (geçici kimlik bilgileri) kullanır. Tüketici uygulaması aynı zamanda Avro'nun SPECIFIC_RECORD
seri durumdan çıkarıcıya mesajın belirli bir türde olduğu konusunda bilgi vermek için (tek boynuzlu at sürüş isteği). Mesaj seri durumdan başarıyla çıkarıldıktan sonra tüketici uygulaması onu gereksinimlere göre işler.
Temizlemek
Son adım temizlemektir. Gereksiz ücretlendirmelerden kaçınmak için bu gönderi için kullanılan CloudFormation yığınları tarafından oluşturulan tüm kaynakları kaldırmalısınız. Bunu yapmanın en basit yolu yığınları silmektir. İlk önce şunu sil MSKClusterStack
ardından MSKClientStack
A Hesabından. Ardından şunu silin: SchemaRegistryStack
Hesap B'den.
Sonuç
Bu yazıda, Avro şeması kullanarak mesajları doğrulamak için AWS Glue Schema Registry'nin Amazon MSK ve akış işleme uygulamalarıyla nasıl kullanılacağını gösterdik. Schema Registry'nin merkezi bir AWS hesabında (data lake hesabı) bulunduğu ve Kafka üretici ve tüketici uygulamalarının ayrı bir AWS hesabında bulunduğu dağıtılmış bir mimari oluşturduk. Uygulama ekiplerinin şemaları tek bir yerde tutmasını verimli hale getirmek için merkezi hesaptaki şema kayıt defterinde bir Avro şeması oluşturduk. AWS Glue Schema Registry kimlik tabanlı erişim politikalarını desteklediğinden, ayrı bir hesapta çalışan Kafka üretici ve tüketici uygulamalarının mesajları doğrulamak amacıyla merkezi hesaptan şemaya güvenli bir şekilde erişmesine izin vermek için hesaplar arası IAM rolünü kullandık. Avro şeması önceden kararlaştırıldığı için Avro'yu kullandık SpecificRecord
derleme zamanında tür güvenliğini sağlamak ve istemci tarafında çalışma zamanı şeması doğrulama sorunlarını önlemek için. Bu gönderi için kullanılan kod şu adreste mevcuttur: GitHub referans için.
Bu çözümdeki hizmetler ve kaynaklar hakkında daha fazla bilgi edinmek için bkz. AWS Tutkal Şeması Kayıt Defteri, Amazon MSK Geliştirici Kılavuzu, AWS Glue Schema Registry SerDe kitaplığı, ve IAM öğreticisi: IAM rollerini kullanarak AWS hesaplarında erişim yetkisi verin.
Yazar Hakkında
Vikas Bajaj Amazon Web Service'te Baş Çözüm Mimarıdır. Vikas, dijital yerli müşterilerle çalışır ve onlara teknoloji mimarisi ve modelleme ile stratejik iş hedeflerini karşılamaya yönelik seçenekler ve çözümler konusunda tavsiyelerde bulunur. Tasarımların ve çözümlerin verimli, sürdürülebilir ve mevcut ve gelecekteki iş ihtiyaçlarına uygun olmasını sağlar. Mimarlık ve teknoloji tartışmalarının yanı sıra kriket izlemekten ve oynamaktan hoşlanıyor.
- Akıllı para. Avrupa'nın En İyi Bitcoin ve Kripto Borsası.
- Plato blok zinciri. Web3 Metaverse Zekası. Bilgi Güçlendirildi. SERBEST ERİŞİM.
- KriptoHawk. Altcoin Radarı. Ücretsiz deneme.
- Kaynak: https://aws.amazon.com/blogs/big-data/validate-streaming-data-over-amazon-msk-using-schemas-in-cross-account-aws-glue-schema-registry/