A Pulsar Flink csatlakozó 2.7.0 újdonságai

( Sijia-w) (2020. december 24.)

Ismerje meg a Pulsar Flink Connector 2.7.0 legérdekesebb és legfontosabb jellemzői.

A Pulsar Flink Connector ideális megoldást kínál az egyesített kötegelt és adatfolyam-továbbításhoz az Apache Pulsar és az Apache Flink segítségével. A Pulsar Flink Connector 2.7.0 támogatja a Pulsar 2.7 és a Flink 1.12 szolgáltatásait, és teljes mértékben kompatibilis a Flink adatformátummal.

A Pulsar Flink Connectorról

Annak érdekében, hogy a vállalatok valós időadatok alapján egységes kötegelt és streaming képességekre van szükségük. Az Apache Flink egyesíti a kötegelt és adatfolyamos feldolgozást egyetlen számítási motorba, egységes adatábrázolásként „adatfolyamokat”. Bár a fejlesztők kiterjedt munkát végeztek a számítási és az API rétegeken, az adat-, valamint az üzenetküldési és a tárolási rétegeken nagyon kevés munkát végeztek. Azonban a valóságban az adatokat külön tároló- és üzenetküldési technológiákkal létrehozott adattárolókba osztják szét. Ennek eredményeként még mindig nincs egyetlen igazságforrás, és a fejlesztői csapatok általános működése továbbra is rendetlen. A rendetlen műveletek kezelése érdekében adatokat streamekben kell tárolnunk. Az Apache Pulsar (az Apache BookKeeperrel együtt) tökéletesen megfelel a kritériumoknak: az adatokat egy példányban (az igazság forrása) tárolják, és patakokban (pub-sub interfészeken keresztül) és szegmensekben (kötegelt feldolgozás céljából) lehet hozzájuk férni. Amikor a Flink és a Pulsar összeáll, a két nyílt forráskódú technológia egységes adatarchitektúrát hoz létre a valós idejű adatközpontú vállalkozások számára.

A Pulsar Flink csatlakozó rugalmas adatfeldolgozást biztosít Apache Pulsar és Apache Flink használatával, lehetővé téve az Apache Flink számára, hogy adatok olvasása / írása az Apache Pulsar-ból. A Pulsar Flink Connector lehetővé teszi, hogy üzleti logikájára koncentrálhasson, anélkül, hogy aggódna a tárolási részletek miatt.

Kihívások

Amikor először fejlesztettük ki a Pulsar Flink Connector-t, széles körben elfogadták mind a Flink és Pulsar közösségek. A Pulsar Flink csatlakozó kihasználásával a Hewlett Packard Enterprise (HPE) valós idejű számítási platformot készített, BIGO valós idejű üzenetfeldolgozó rendszert épített fel, és Zhihu éppen felméri a Csatlakozó valós idejű számítástechnikai rendszerre való alkalmasságát.

Amint egyre több felhasználó fogadta el a Pulsar Flink Connector-t, a közösségtől egy gyakori problémát hallottunk: nehéz elvégezni a sorosítást és a deszerializációt. Míg a Pulsar Flink csatlakozó kihasználja a Pulsar sorosítást, a korábbi verziók nem támogatták a Flink adatformátumot. Ennek eredményeként a felhasználóknak sok konfigurációt kellett elvégezniük ahhoz, hogy a csatlakozót valós idejű számításokhoz használják.

A Pulsar Flink csatlakozó könnyebb használata érdekében úgy döntöttünk, hogy kiépítjük a képességeket, hogy teljes mértékben támogatja a Flink adatformátumot, így a felhasználóknak nem kell időt fordítaniuk a konfigurálásra.

A Pulsar Flink Connector 2.7.0 újdonságai?

A Pulsar Flink Connector 2.7.0 támogatja a szolgáltatásokat Apache Pulsar 2.7.0 és Apache Flink 1.12 verziókban, és teljesen kompatibilis a Flink csatlakozóval és a Flink üzenet formátumával. Most használhatja a Flink fontos funkcióit, például a pontosan egyszeri mosogatót, a Pulsar mechanizmus felfordítását, a Data Definition Language (DDL) által kiszámított oszlopokat, a vízjeleket és a metaadatokat. Emellett kihasználhatja a Key-Shared előfizetését a Pulsarban, és sok konfiguráció nélkül végezheti a sorosítást és a deszerializációt. Ezenkívül könnyedén testreszabhatja a konfigurációt vállalkozása alapján.

Az alábbiakban részletesen bemutatjuk a Pulsar Flink Connector 2.7.0 legfontosabb jellemzőit.

Rendezett üzenetsor magas- teljesítmény

Amikor a felhasználóknak szigorúan garantálniuk kellett az üzenetek sorrendjét, csak egyetlen fogyasztó használhatta az üzeneteket. Ez súlyos hatással volt az áteresztőképességre. Ennek megoldására egy Key\_Shared előfizetési modellt terveztünk a Pulsar-ban. Garantálja az üzenetek sorrendjét és javítja az átvitelt azáltal, hogy minden egyes üzenethez hozzáad egy kulcsot, és ugyanazzal a Key Hash-sel továbbítja az üzeneteket egy fogyasztóhoz.

A Pulsar Flink Connector 2.7.0 támogatja a Key\_Shared előfizetési modellt. Ezt a funkciót úgy engedélyezheti, hogy a enable-key-hash-range értéket true értékre állítja. Az egyes fogyasztók által feldolgozott Key Hash tartományt a feladatok párhuzamossága határozza meg.

Pontosan egyszeri szemantika bevezetése a Pulsar mosogatóhoz (a Pulsar tranzakció alapján)

A korábbi verziókban süllyedjen az operátorok csak a legalább egyszer szemantikát támogatták, amely nem tudta teljes mértékben teljesíteni a végpontok közötti konzisztencia követelményeit. Az üzenetek deduplikálásához a felhasználóknak piszkos munkát kellett elvégezniük, ami nem volt felhasználóbarát.

A tranzakciókat a Pulsar 2.7.0 támogatja, ami jelentősen javítja a Flink mosogató hibatűrő képességét. A Pulsar Flink Connector 2.7.0 alkalmazásban pontosan egyszeri szemantikát terveztünk a mosogató operátorok számára a Pulsar tranzakciók alapján. A Flink a kétfázisú protokollt használja a TwoPhaseCommitSinkFunction megvalósításához. A fő életciklus-módszerek a startTransaction (), preCommit (), kötelezettség (), abort (), recoveryAndCommit (), recoveryAndAbort ().

A szemantikát rugalmasan választhatja ki, amikor létrehoz egy mosogató operátort, és a a belső logikai változások átláthatók. A Pulsar tranzakciók hasonlítanak a Flink kétfázisú elkötelező protokolljához, ami jelentősen javítja a Connector Sink megbízhatóságát.

Könnyen megvalósítható a startTransaction és az preCommit. Csak Pulsar tranzakciót kell indítania, és az ellenőrzési pont után meg kell őriznie a tranzakció TID-jét. A preCommit szakaszban meg kell győződnie arról, hogy az összes üzenet a Pulsar-ra kerül, és az előre lekötött üzeneteket végül elkötelezzük.

A helyreállításra és a helyreállításra összpontosítunk a megvalósítás során. A Kafka szolgáltatásai által korlátozott Kafka-csatlakozó hackstílusokat alkalmaz a recoveryAndCommit számára. A Pulsar tranzakciók nem támaszkodnak az adott Producerre, így könnyen elvégezheti és megszakíthatja a tranzakciókat a TID alapján.

A Pulsar tranzakciók rendkívül hatékonyak és rugalmasak. A Pulsar és a Flink előnyeit kihasználva a Pulsar Flink csatlakozó még erősebb. Folytatjuk a Pulsar Flink csatlakozó tranzakciós süllyesztésének javítását.

Bemutatjuk az upert-pulsar csatlakozót

A Flink közösség felhasználói kifejezték igényeiket az upert Pulsar iránt. A levelezőlisták és problémák áttekintése után összefoglaltuk a következő három okot.

  • A Pulsar témát úgy értelmezzük, mint egy váltónapló folyamot, amely a kulcsokkal ellátott rekordokat upert (más néven beszúrás / frissítés) eseményként értelmezi.
  • A valós idejű folyamat részeként egyesítsen több adatfolyamot a gazdagítás érdekében, és az eredményeket tárolja egy Pulsar-témakörbe a későbbi további számításokhoz. Az eredmény azonban tartalmazhat frissítési eseményeket.
  • A valós idejű folyamat részeként összesítse az adatfolyamokat, és az eredményeket tárolja egy Pulsar témakörbe a későbbi további számításokhoz. Az eredmény azonban tartalmazhat frissítési eseményeket.

A követelmények alapján hozzáadjuk az Upsert Pulsar támogatását. A upsert-pulsar csatlakozó lehetővé teszi az adatok Pulsar-témakörökből történő olvasását és az adatok írását azokba felfelé módon.

  • Forrásként az upsert-pulsar csatlakozó egy váltási naplót hoz létre, ahol minden adatrekord képviseli esemény frissítése vagy törlése. Pontosabban, az adatrekordban szereplő értéket ugyanazon kulcs utolsó értékének UPDATE-ként értelmezzük, ha van ilyen (ha megfelelő kulcs még nem létezik, akkor a frissítés INSERT-nek tekintendő). A táblázat analógiáját felhasználva, a változásnapló-adatfolyamban lévő adatrekordot UPSERT-ként (más néven INSERT / UPDATE) értelmezik, mivel az azonos kulccsal rendelkező bármely létező sort felülírják. Ezenkívül a null értékeket speciális módon értelmezik: a null értékű rekord „DELETE” -t képvisel.
  • Felfogásként a upsert-pulsar csatlakozó egy váltónapló-folyamot képes felemészteni. Az INSERT / UPDATE\_AFTER adatokat a Pulsar üzenetek normál értékeként írja, és a DELETE adatokat Pulsar üzenetekként null értékekkel írja (a kulcs síremlékét adja meg). A Flink garantálja az elsődleges kulcs üzeneteinek sorrendjét az elsődleges kulcs oszlopok értékeinek partíció adatai alapján, így az ugyanazon a kulcson található frissítési / törlési üzenetek ugyanabba a partícióba esnek.

Támogatja a FLIP-27 és a FLIP-95

Ez a szolgáltatás egyesíti a kötegelt adatfolyam forrását, és optimalizálja a feladat felfedezésének és az adatok olvasásának mechanizmusát. Ez a sarokköve a Pulsar kötegelt és streaming egyesítésének megvalósításában is. Az új Table API támogatja a DDL által kiszámított oszlopokat, vízjeleket és metaadatokat.

Támogatja az SQL metaadatok olvasását és írását a FLIP-107

A FLIP-107 lehetővé teszi a felhasználók számára, hogy a csatlakozási metaadatok metaadat-oszlopaként hozzáférjenek a táblázatdefiníciókhoz. A valós idejű számítástechnikában a felhasználóknak általában további információkra van szükségük, például eventTime, testreszabott mezőkre. A Pulsar Flink csatlakozó támogatja az SQL metaadatok olvasását és írását, így a felhasználók számára rugalmas és könnyű kezelni a Pulsar üzenetek metaadatait a Pulsar Flink Connector 2.7.0 alkalmazásban. A konfigurációról a Pulsar Üzenet metaadatok kezelése című részben olvashat.

Flink formátumtípus hozzáadása atomic a Pulsar primitív típusok támogatásához

A Pulsar Flink Connector 2.7.0 verzióban a Pulsar primitív típusok támogatásához hozzáadjuk a Flink formátum típusát: atomic. Ha a Flink feldolgozáshoz Pulsar primitív típusra van szükség, akkor a atomic elemet használhatja összekötő formátumként. A Pulsar primitív típusokkal kapcsolatos további információkért lásd: https: //pulsar.apache.org / docs / en / schema-understand / .

Áthelyezés

Ha a Pulsar Flink Connector előző verzióját használja, akkor módosítania kell az SQL és az API paramétereket Eszerint. Az alábbiakban részleteket közölünk mindegyikről.

SQL

Az SQL-ben megváltoztattuk a Pulsar konfigurációs paramétereit a DDL deklarációban. Néhány paraméter neve megváltozik, de az értékek nem változnak.

  • Távolítsa el a connector. előtagot a paraméterek nevéből.
  • Módosítsa a connector.type paraméter nevét connector -re.
  • Módosítsa az indítási mód paraméter nevét connector.startup-mode scan.startup.mode -be.
  • Állítsa be a Pulsar tulajdonságait properties.pulsar.reader.readername=testReaderName.

Ha SQL-t használ a Pulsar Flink Connector alkalmazásban, akkor ennek megfelelően kell beállítania az SQL-konfigurációt, amikor a Pulsar Flink Connector 2.7.0-ra vált. A következő példa bemutatja az előző verziók és az SQL 2.7.0 verziója közötti különbségeket.

SQL a korábbi verziókban :

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 a Pulsar Flink Connector 2.7.0-ban:

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

API szempontjából néhány osztályt módosítottunk, és könnyebbé tettük a testreszabást.

  • A sorosítási problémák megoldása érdekében megváltoztattuk a FlinkPulsarSink szerkesztési módszer aláírását, és hozzáadtuk a PulsarSerializationSchema fájlt.
  • Eltávolítottuk a sorhoz nem megfelelő osztályokat, például a FlinkPulsarRowSink, FlinkPulsarRowSource. Ha a Row formátummal kell foglalkoznia, használhatja a Flink Row-val kapcsolatos sorosítási összetevőket.

A PulsarSerializationSchema fájlokat felépítheti a PulsarSerializationSchemaWrapper.Builder. A TopicKeyExtractor átkerül a PulsarSerializationSchemaWrapper mappába. Az API beállításakor a következő mintát veheti referenciaként.

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

Jövőbeni terv

Ma egy köteget tervezünk és az új Flink Source API-ra (FLIP-27) épülő, Pulsar Source-ba integrált adatfolyam-megoldás. Az új megoldás feloldja az aktuális streaming forrás interfész (SourceFunction) korlátait, és egyidejűleg egységesíti a forrás interfészeket a kötegelt és a streaming API-k között.

A Pulsar olyan hierarchikus architektúrát kínál, ahol az adatok streaming, batch, és hideg adatok, amelyek lehetővé teszik a Pulsar számára a végtelen kapacitás biztosítását. Ez teszi a Pulsart ideális megoldássá az egységes kötegelt és adatfolyam-továbbításhoz.

Az új Flink Source API-n alapuló kötegelt és adatfolyamos megoldás két egyszerű részre oszlik: SplitEnumerator és Reader. A SplitEnumerator felfedezi és hozzárendeli a partíciókat, az Olvasó pedig olvassa a partíció adatait.

A Pulsar a főkönyvi blokkban tárolja az üzeneteket, és a Pulsar adminisztrátoron keresztül megkeresheti a főkönyvet, majd megadhatja a brókerpartíciót, a BookKeeper-partíciót, az Offloader-partíciót és más információkat különböző particionálási házirendeken keresztül. További részletek: https://github.com/streamnative/pulsar-flink/issues/187 .

Következtetés

Megjelent a Pulsar Flink Connector 2.7.0, és mindenkit erősen javasolunk a Pulsar Flink Connector 2.7.0 használatára. Az új verzió felhasználóbarátabb, és a Pulsar 2.7 és a Flink 1.12 különféle funkcióival engedélyezett. Hozzájárulunk a Pulsar Flink Connector 2.7.0-hoz a Flink-tárhoz . Ha bármilyen kérdése van a Pulsar Flink Connector kapcsán, bátran nyithat meg kérdéseket a oldalon: https://github.com/streamnative/pulsar-flink/issues .

A szerzőről

Jianyun Zhao a StreamNative szoftvermérnöke. Előtte a valós idejű számítási rendszer fejlesztéséért volt felelős a Zhaopin.com címen. Kövesse őt a twitteren .

Jennifer Huang az Apache Pulsar parancsnoka. A StreamNative vezető tartalmi stratégájaként dolgozik, az Apache Pulsar dokumentációjáért és a közösség növekedéséért felelős. Kövesse őt a twitteren .

Ezt a bejegyzést eredetileg a StreamNative blogon tették közzé. .

Tetszik ez a bejegyzés? Kérjük, ajánlja és / vagy ossza meg.

Szeretne többet megtudni? Lásd: https://streamnative.io/blog . Kövessen minket a Mediumon, és nézze meg a GitHub .