Nyheder i Pulsar Flink Connector 2.7.0

( Sijia-w) (24. december 2020)

Lær de mest interessante og vigtige funktioner ved Pulsar Flink Connector 2.7.0.

Pulsar Flink Connector giver en ideel løsning til samlet batch og streaming med Apache Pulsar og Apache Flink. Pulsar Flink Connector 2.7.0 understøtter funktioner i Pulsar 2.7 og Flink 1.12 og er fuldt kompatibel med Flink-dataformat.

Om Pulsar Flink Connector

For at virksomheder kan få adgang til virkelige tidsdataindsigt, har de brug for ensartede batch- og streamingfunktioner. Apache Flink forener batch- og stream-behandling i en enkelt computermotor med “streams” som den samlede datarepræsentation. Selvom udviklere har udført omfattende arbejde på computer- og API-lagene, er der kun gjort meget lidt arbejde med data- og messaging- og lagringslagene. I virkeligheden er data dog adskilt i datasiloer skabt af forskellige lager- og messaging-teknologier. Som et resultat er der stadig ingen enkelt sandhedskilde, og den samlede drift for udviklerholdene er stadig rodet. For at løse de rodede operationer er vi nødt til at gemme data i streams. Apache Pulsar (sammen med Apache BookKeeper) opfylder perfekt kriterierne: data lagres som en kopi (sandhedskilde) og kan tilgås i streams (via pub-sub-grænseflader) og segmenter (til batchbehandling). Når Flink og Pulsar mødes, skaber de to open source-teknologier en samlet dataarkitektur til datadrevne virksomheder i realtid.

Pulsar Flink-stik giver elastisk databehandling med Apache Pulsar og Apache Flink , så Apache Flink kan læse / skrive data fra / til Apache Pulsar. Pulsar Flink Connector giver dig mulighed for at koncentrere dig om din forretningslogik uden at bekymre dig om lageroplysningerne.

Udfordringer

Da vi først udviklede Pulsar Flink Connector, modtog den bred vedtagelse fra begge Flink og Pulsar samfund. Ved hjælp af Pulsar Flink-stikket Hewlett Packard Enterprise (HPE) byggede en computer i realtid, BIGO byggede et system til meddelelsesbehandling i realtid, og Zhihu er i færd med at vurdere Connectorens egnethed til et realtids-computersystem.

Da flere brugere vedtog Pulsar Flink Connector, hørte vi et fælles problem fra samfundet: det er svært at lave serialisering og deserialisering. Mens Pulsar Flink-stikket udnytter Pulsar-serialisering, understøttede de tidligere versioner ikke Flink-dataformatet. Som et resultat måtte brugerne foretage mange konfigurationer for at bruge stikket til realtidsberegning.

For at gøre Pulsar Flink-stikket nemmere at bruge besluttede vi at opbygge funktionerne til fuldt ud understøtter Flink-dataformatet, så brugerne ikke behøver at bruge tid på konfiguration.

Hvad er nyt i Pulsar Flink Connector 2.7.0?

Pulsar Flink Connector 2.7.0 understøtter funktioner i Apache Pulsar 2.7.0 og Apache Flink 1.12, og er fuldt kompatibel med Flink-stik og Flink-meddelelsesformat. Nu kan du bruge vigtige funktioner i Flink, såsom nøjagtigt en gang sink, upsert Pulsar-mekanisme, Data Definition Language (DDL) -beregnede kolonner, vandmærker og metadata. Du kan også udnytte Key-Shared-abonnementet i Pulsar og udføre serialisering og deserialisering uden megen konfiguration. Derudover kan du nemt tilpasse konfigurationen baseret på din virksomhed.

Nedenfor introducerer vi nøglefunktionerne i Pulsar Flink Connector 2.7.0 i detaljer.

Bestilt meddelelseskø med høj- ydeevne

Når brugerne havde brug for strengt at garantere bestilling af meddelelser, fik kun en forbruger tilladelse til at forbruge meddelelser. Dette havde en alvorlig indvirkning på kapaciteten. For at løse dette designede vi en Key\_Shared abonnementsmodel i Pulsar. Det garanterer rækkefølgen af ​​meddelelser og forbedrer gennemstrømningen ved at tilføje en nøgle til hver besked og dirigerer meddelelser med den samme nøglehash til en forbruger.

Pulsar Flink Connector 2.7.0 understøtter Key\_Shared abonnementsmodellen. Du kan aktivere denne funktion ved at indstille enable-key-hash-range til true. Key Hash-området, der behandles af hver forbruger, bestemmes af parallelitet af opgaver.

Introduktion af semantik nøjagtigt én gang for Pulsar sink (baseret på Pulsar-transaktionen)

I tidligere versioner sinkes operatører understøttede kun mindst én gang semantik, som ikke fuldt ud kunne opfylde kravene til konsistens fra ende til slut. For at kopiere meddelelser skulle brugerne udføre noget beskidt arbejde, som ikke var brugervenligt.

Transaktioner understøttes i Pulsar 2.7.0, hvilket i høj grad forbedrer Flink-sinkens fejltoleranceevne. I Pulsar Flink Connector 2.7.0 designede vi nøjagtigt en gang semantik til sinkoperatører baseret på Pulsar-transaktioner. Flink bruger tofaset commit-protokollen til at implementere TwoPhaseCommitSinkFunction. De vigtigste livscyklusmetoder er beginTransaction (), preCommit (), commit (), abort (), recoverAndCommit (), recoverAndAbort ().

Du kan vælge semantik fleksibelt, når du opretter en sinkoperator, og interne logiske ændringer er gennemsigtige. Pulsar-transaktioner svarer til to-fasetildelingsprotokollen i Flink, hvilket i høj grad vil forbedre pålideligheden af ​​Connector Sink.

Det er let at implementere beginTransaction og preCommit. Du behøver kun at starte en Pulsar-transaktion og vedligeholde transaktionens TID efter kontrolpunktet. I preCommit-fasen skal du sikre, at alle meddelelser skylles til Pulsar, og meddelelser, der er forpligtet til at blive forpligtet, bliver til sidst begået.

Vi fokuserer på recoverAndCommit og recoverAndAbort i implementeringen. Begrænset af Kafka-funktioner vedtager Kafka-stik hackformater til recoverAndCommit. Pulsar-transaktioner er ikke afhængige af den specifikke producent, så det er nemt for dig at foretage og afbryde transaktioner baseret på TID.

Pulsar-transaktioner er meget effektive og fleksible. Med fordelene ved Pulsar og Flink er Pulsar Flink-stikket endnu mere kraftfuldt. Vi vil fortsætte med at forbedre transaktionsvasken i Pulsar Flink-stikket.

Introduktion til upsert-pulsar-stik

Brugere i Flink-samfundet udtrykte deres behov for upsert Pulsar. Efter at have kigget igennem mailinglister og problemer har vi opsummeret følgende tre grunde.

  • Fortolker Pulsar-emne som en ændringslogstrøm, der fortolker poster med nøgler som upsert (aka indsæt / opdater) hændelser.
  • Som en del af pipeline i realtid kan du slutte dig til flere streams for berigelse og gemme resultater i et Pulsar-emne til senere beregning. Resultatet kan dog indeholde opdateringshændelser.
  • Som en del af realtidsrørledningen kan du samle data-streams og gemme resultater i et Pulsar-emne til senere beregning senere. Resultatet kan dog indeholde opdateringshændelser.

Baseret på kravene tilføjer vi support til Upsert Pulsar. Upsert-pulsar-stikket giver mulighed for at læse data fra og skrive data til Pulsar-emner på upsert-måde.

  • Som kilde producerer upsert-pulsar-stikket en ændringslogstrøm, hvor hver datapost repræsenterer en opdatering eller sletning af begivenhed. Mere præcist fortolkes værdien i en datapost som en OPDATERING af den sidste værdi for den samme nøgle, hvis nogen (hvis en tilsvarende nøgle ikke findes endnu, vil opdateringen blive betragtet som en INSERT). Ved hjælp af tabelanalogen fortolkes en dataregistrering i en changelog-stream som en UPSERT (aka INSERT / UPDATE), fordi enhver eksisterende række med den samme nøgle overskrives. Nulværdier fortolkes også på en speciel måde: en post med en nulværdi repræsenterer en “SLET”.
  • Som en sink kan upsert-pulsar-stikket forbruge en ændringslogstrøm. Det skriver INSERT / UPDATE\_AFTER-data som normal Pulsar-meddelelsesværdi og skriver DELETE data som Pulsar-meddelelser med nulværdier (angiv gravsten til nøglen). Flink garanterer meddelelsesbestilling på den primære nøgle ved partitionsdata om værdierne i de primære nøglekolonner, så opdaterings- / sletningsmeddelelserne på den samme nøgle falder i den samme partition.

Understøtter ny kildeinterface og Table API introduceret i FLIP-27 og FLIP-95

Denne funktion forener kilden til batchstrømmen og optimerer mekanismen til opgaveopdagelse og datalæsning. Det er også hjørnestenen i vores implementering af Pulsar-batch og streaming-forening. Den nye Table API understøtter DDL-beregnede kolonner, vandmærker og metadata.

Understøtter SQL-læsning og skrivemetadata som beskrevet i FLIP-107

FLIP-107 giver brugerne adgang til connector-metadata som en metadata-kolonne i tabeldefinitioner. I realtids computing har brugerne normalt brug for yderligere oplysninger, såsom eventTime, tilpassede felter. Pulsar Flink-stik understøtter SQL-læse- og skrivemetadata, så det er fleksibelt og let for brugerne at administrere metadata for Pulsar-meddelelser i Pulsar Flink Connector 2.7.0. For detaljer om konfigurationen henvises til Pulsar-meddelelsesmetadata manipulation .

Tilføj Flink-formattype atomic for at understøtte Pulsar primitive typer

I Pulsar Flink Connector 2.7.0 tilføjer vi Flink format type atomic for at understøtte Pulsar primitive typer. Når Flink-behandling kræver en Pulsar-primitiv type, kan du bruge atomic som connectorformat. For mere information om primitive typer af Pulsar, se https: //pulsar.apache.org / docs / da / schema-understand / .

Migration

Hvis du bruger den tidligere Pulsar Flink Connector-version, skal du justere SQL- og API-parametre derfor. Nedenfor giver vi detaljer om hver.

SQL

I SQL har vi ændret Pulsar-konfigurationsparametre i DDL-erklæring. Navnet på nogle parametre ændres, men værdierne ændres ikke.

  • Fjern connector. præfikset fra parameternavne.
  • Skift navnet på connector.type -parameteren til connector.
  • Skift starttilstandsparameternavnet fra connector.startup-mode i scan.startup.mode.
  • Juster pulsaregenskaber som properties.pulsar.reader.readername=testReaderName.

Hvis du bruger SQL i Pulsar Flink Connector, skal du justere din SQL-konfiguration i overensstemmelse hermed, når du migrerer til Pulsar Flink Connector 2.7.0. Følgende eksempel viser forskellene mellem tidligere versioner og 2.7.0-versionen for SQL.

SQL i tidligere versioner :

create table topic1(
`rip` VARCHAR,
`rtime` VARCHAR,
`uid` bigint,
`client\_ip` VARCHAR,
`day` as TO\_DATE(rtime),
`hour` as date\_format(rtime,"HH")
) with (
"connector.type" ="pulsar",
"connector.version" = "1",
"connector.topic" ="persistent://public/default/test\_flink\_sql",
"connector.service-url" ="pulsar://xxx",
"connector.admin-url" ="http://xxx",
"connector.startup-mode" ="earliest",
"connector.properties.0.key" ="pulsar.reader.readerName",
"connector.properties.0.value" ="testReaderName",
"format.type" ="json",
"update-mode" ="append"
);

SQL i Pulsar Flink Connector 2.7.0:

create table topic1(
`rip` VARCHAR,
`rtime` VARCHAR,
`uid` bigint,
`client\_ip` VARCHAR,
`day` as TO\_DATE(rtime),
`hour` as date\_format(rtime,"HH")
) with (
"connector" ="pulsar",
"topic" ="persistent://public/default/test\_flink\_sql",
"service-url" ="pulsar://xxx",
"admin-url" ="http://xxx",
"scan.startup.mode" ="earliest",
"properties.pulsar.reader.readername" = "testReaderName",
"format" ="json");

API

Fra et API-perspektiv justerede vi nogle klasser og muliggjorde lettere tilpasning.

  • For at løse serialiseringsproblemer ændrede vi signaturen til konstruktionsmetoden FlinkPulsarSink og tilføjede PulsarSerializationSchema.
  • Vi fjernede upassende klasser relateret til række, såsom FlinkPulsarRowSink, FlinkPulsarRowSource. Hvis du har brug for at håndtere rækkeformat, kan du bruge Flink Row-relaterede serialiseringskomponenter.

Du kan opbygge PulsarSerializationSchema ved hjælp af PulsarSerializationSchemaWrapper.Builder. TopicKeyExtractor flyttes til PulsarSerializationSchemaWrapper. Når du justerer din API, kan du tage følgende prøve som reference.

new PulsarSerializationSchemaWrapper.Builder(new SimpleStringSchema())
.setTopicExtractor(str -> getTopic(str))
.build();

Fremtidig plan

I dag designer vi en batch og stream-løsning integreret med Pulsar Source, baseret på den nye Flink Source API (FLIP-27). Den nye løsning vil låse op for begrænsningerne i den aktuelle streamingkildegrænseflade (SourceFunction) og samtidig forene kildegrænsefladerne mellem batch- og streaming-APIerne.

Pulsar tilbyder en hierarkisk arkitektur, hvor data er opdelt i streaming, batch og kolde data, som gør det muligt for Pulsar at give uendelig kapacitet. Dette gør Pulsar til en ideel løsning til samlet batch og streaming.

Batch- og stream-løsningen baseret på den nye Flink Source API er opdelt i to enkle dele: SplitEnumerator og Reader. SplitEnumerator opdager og tildeler partitioner, og Reader læser data fra partitionen.

Pulsar gemmer meddelelser i hovedblokken, og du kan finde hovedbøgerne gennem Pulsar-admin og derefter give mæglerpartition, BookKeeper-partition, Offloader-partition og anden information gennem forskellige partitioneringspolitikker. For flere detaljer henvises til https://github.com/streamnative/pulsar-flink/issues/187 .

Konklusion

Pulsar Flink Connector 2.7.0 frigives, og vi opfordrer kraftigt alle til at bruge Pulsar Flink Connector 2.7.0. Den nye version er mere brugervenlig og er aktiveret med forskellige funktioner i Pulsar 2.7 og Flink 1.12. Vi bidrager med Pulsar Flink Connector 2.7.0 til Flink repository . Hvis du er bekymret for Pulsar Flink Connector, er du velkommen til at åbne problemer i https://github.com/streamnative/pulsar-flink/issues .

Om forfatteren

Jianyun Zhao er softwareingeniør hos StreamNative. Før det var han ansvarlig for udviklingen af ​​et realtids-computersystem på Zhaopin.com. Du kan følge ham på twitter .

Jennifer Huang er en Apache Pulsar-kommitter. Hun arbejder som senior indholdsstrateg hos StreamNative, ansvarlig for Apache Pulsar-dokumentation og vækst i samfundet. Du kan følge hende på twitter .

Dette indlæg blev oprindeligt offentliggjort på StreamNative-blog .

Kan du lide dette indlæg? Anbefal og / eller del.

Vil du vide mere? Se https://streamnative.io/blog . Følg os på Medium og tjek vores GitHub .