Nëse doni të analizoni postimet e Mastodon, futja e tyre në Apache Kafka® është një hap i parë i arsyeshëm. Lexoni më tej për të zbuluar se si ta bëni këtë me Typescript dhe NodeJS.

"Mastodon" është rritur në popullaritet gjatë muajve të fundit. Nëse nuk jeni ende të njohur me këtë krijesë ekzotike në internet, Mastodon është një softuer i rrjeteve sociale me burim të hapur për mikroblogging. Në vend që të jetë një rrjet i vetëm, si Twitter, Mastodon është një platformë e federuar që lidh serverë të pavarur të ndërlidhur. Kjo e bën atë një sistem plotësisht të decentralizuar. Ai mbështetet në ActivityPub dhe përdor formatin e të dhënave ActivityStreams 2.0 dhe JSON-LD. Sa i përket funksionalitetit, ai i ngjan shumë Twitter-it - mund të lexoni afatin kohor, të postoni mesazhe dhe të ndërveproni me përdoruesit e tjerë.

Nëse sapo jeni bashkuar me Mastodon dhe jeni ende duke e eksploruar, mund të zbuloni se afati kohor i lëvizjes ka kufijtë e tij për të kuptuar gjithçka që po ndodh atje. Zbatimi i disa aftësive inxhinierike do të japë një pasqyrë më të mirë mbi temat dhe diskutimet që ndodhin në platformë.

Meqenëse afati kohor i Mastodon nuk është gjë tjetër veçse një koleksion ngjarjesh që vijnë vazhdimisht, furnizimi i të dhënave është i përshtatshëm për Apache Kafka®. Shtimi i lidhësve Kafka në krye të kësaj hap mundësi të shumta për të përdorur të dhënat për grumbullime dhe vizualizime.

Vazhdoni të lexoni për të mësuar se si të sillni të dhëna nga Mastodon në Kafka duke përdorur TypeScript dhe disa biblioteka të dobishme.

Përgatitni grupin Apache Kafka

Për të sjellë të dhënat nga afati kohor i Mastodon në një temë në Apache Kafka, do t'ju duhet një grup Apache Kafka dhe disa kode për të transmetuar të dhënat atje. Për të parën, mund të përdorni ose grupin tuaj, ose një version të menaxhuar që funksionon në re, si p.sh. Aiven për Apache Kafka. Nëse nuk keni ende një llogari në Aiven, regjistrohu për një provë falas dhe krijo grupin tënd, konfigurimi zgjat vetëm disa minuta.

Pasi grupi juaj të funksionojë, shtoni një temë me emrin mastodon. Përndryshe, mund të përdorni çdo emër tjetër, thjesht mbani mend, do t'ju duhet pak më vonë.

Për t'u lidhur në mënyrë të sigurt me grupin ne do të përdorim SSL. Aiven tashmë kujdeset për konfigurimin e serverit, por do t'ju duhet të shkarkoni tre skedarë që klienti të krijojë lidhjen. Shkarkoni këta skedarë nga tastiera e Aiven:

Këto skedarë do t'ju duhen më vonë, prandaj vendosini diku të sigurt për momentin.

Duke punuar me Mastodon API

Mastodon API ka dokumentacion të shkëlqyer që e bën të thjeshtë aksesin në burimet publike të të dhënave. Ju nuk keni nevojë të regjistroheni për të tërhequr një burim publik, gjë që e bën atë shumë të përshtatshëm. Në fakt, thjesht provojeni tani. Drejtoni linjën më poshtë në terminalin tuaj për të filluar marrjen e një rryme të dhënash nga mastodon.social:

curl https://mastodon.social/api/v1/streaming/public

Si përgjigje, ju duhet të shihni një rrjedhë të pafund të ngjarjeve hyrëse:

Analizimi i përgjigjes nga serveri me dorë është një operacion monoton dhe i lodhshëm. Në vend që të rishpikni timonin, mund të përdorni një nga "bibliotekat e disponueshme për Mastodon". Për këtë shembull ne do të përdorim masto.js.

Shkoni në kod

Për t'ju dhënë një fillim të menjëhershëm për të sjellë të dhënat e Mastodon në një grupim Apache Kafka, klononi këtë depo:

git clone https://github.com/aiven/mastodon-to-kafka

Pasi të keni përmbajtjen e depove në nivel lokal, ndiqni këto hapa:

  1. Krijoni një dosje certificates/ dhe shtoni certifikatat SSL që keni shkarkuar më parë në këtë dosje. Do të na duhen këto për t'u lidhur në mënyrë të sigurt me Apache Kafka.
  2. Kopjoni skedarin .env.example dhe riemërtoni në .env, ky skedar do të mbajë variablat e mjedisit.
  3. Vendosni kafka.uri.env në adresën e grupit tuaj. Mund ta merrni nga informacioni i lidhjes së shërbimit tuaj Aiven për Apache Kafka.
  4. Ekzekutoni npm install për të instaluar të gjitha varësitë (nëse nuk keni ende npm ose NodeJS, ndiqni udhëzimet e instalimit).

Së fundi, filloni duke ekzekutuar npm run start dhe duhet të shihni një rrjedhë të raporteve të dorëzimit për çdo mesazh të ri që vjen nga furnizimi publik i Mastodon, i cili përcaktohet në kod (në seksionin tjetër do të shihni se si ta ndryshoni atë në cilindo që ju ushqen Mastodon si!).

Nëse gjërat nuk funksionojnë herën e parë, kontrolloni për mesazhe gabimi të printuara në terminal. Ata do t'ju ndihmojnë të navigoni problemin.

Mund të verifikoni që të dhënat rrjedhin dhe të shihni se çfarë mesazhesh merrni duke aktivizuar Apache Kafka Rest API.

Në menynë kontekstuale për temën, zgjidhni Apache Kafka REST:

Ne mund të tërhiqemi për të parë saktësisht se si funksionon kodi për të dërguar të dhënat nga Mastodon te Apache Kafka. Kjo mund të ndahet në dy hapa logjikë:

  1. Transmetimi i mesazheve nga një kronologji publike Mastodon.
  2. Duke i dërguar këto mesazhe Apache Kafka.

Në seksionet më poshtë mund t'i shihni këto hapa në detaje.

Transmetimi i mesazheve nga një linjë kohore publike e Mastodon

Hapni skedarin mastostream.ts. Ai përmban një modul të vogël për të transmetuar të dhënat e Mastodon.

Për të inicializuar klientin Mastodon, duhet të telefononi login() nga biblioteka e klientit masto.js dhe të siguroni konfigurimin e kërkuar. Ky është gjithashtu vendi për të siguruar informacionin e vërtetimit, megjithatë, duke qenë se ne jemi të interesuar vetëm për burimet publike, veçoria URL është e mjaftueshme. Si URL, përdorni serverin tuaj të preferuar Mastodon.

const masto = await login({
    url: 'https://mastodon.social/', // choose your favourite mastodon server
});

Me klientin e inicializuar Mastodon ju lidheni me API-në e transmetimit publik duke thirrur funksionin asinkron masto.stream.streamPublicTimeline().

const stream = await masto.stream.streamPublicTimeline();

Më në fund, jeni gati të abonoheni në përditësimet nga transmetimi publik i ofruar nga API.

stream.on('update', (status) => {
    console.log(status)
    // next - send status data to Apache Kafka topic
});

Tani është koha për t'i bashkuar këto blloqe ndërtimi.

Për hir të kapsulimit, nuk do të dëshironit që moduli mastostream të dinte drejtpërdrejt për prodhuesin e Apache Kafka. Kjo është arsyeja pse kur bashkojmë të gjithë përbërësit e mësipërm, ne i ofrojmë modulit mastostream një argument më gjenerik të kthimit të thirrjes.
Ky funksion i kthimit të thirrjes do të kthejë mesazhin e statusit Mastodon të konvertuar në një varg dhe pala që ka shkaktuar mastostream do të marrë të dhënat dhe të jetë në gjendje të veprojë në të:

export default async (callback: (status: string) => void) => {
    try {
        const masto = await login({
            url: 'https://fosstodon.org/',
        });

        // Connect to the streaming api
        const stream = await masto.stream.streamPublicTimeline();

        // Subscribe to updates
        stream.on('update', (status) => {
            try {
                callback(JSON.stringify(status));
            } catch (err) {
                console.log('Callback failed', err);
            }
        });
    } catch (err) {
        console.log(err)
    }
};

Kjo është ajo që ju nevojitet për të transmetuar të dhënat nga Mastadon! Koha për t'i dërguar këto mesazhe një teme Apache Kafka.

Dërgimi i mesazheve te Apache Kafka duke përdorur node-rdkafka

Hapni producer.ts për të parë kodin që ju nevojitet për të dërguar të dhënat në një temë Apache Kafka. Për të punuar me Apache Kafka, mund të përdorni një nga bibliotekat ekzistuese të klientëve, ka disa opsione të disponueshme. Ky projekt përdor node-rdkafka, i cili është një mbështjellës NodeJS për bibliotekën Kafka C/C++. Kontrolloni Repositorin e tij GitHub Readme për hapat e instalimit.

Me node-rdkafka mund të krijoni një prodhues për të dërguar të dhëna në grup. Këtu do të përdorni cilësimet e konfigurimit të Apache Kafka të përcaktuara në .env më parë dhe certifikatat që keni shkarkuar për t'u përgatitur për të krijuar një lidhje të sigurt.

//create a producer
const producer = new Kafka.Producer({
    'metadata.broker.list': process.env["kafka.uri"],
    'security.protocol': 'ssl',
    'ssl.key.location': process.env["ssl.key.location"],
    'ssl.certificate.location': process.env["ssl.certificate.location"],
    'ssl.ca.location': process.env["ssl.ca.location"],
    'dr_cb': true
});

Prodhuesi do të lëshojë ngjarje kur gjërat të ndodhin, kështu që për të kuptuar se çfarë po ndodh dhe për të kapur ndonjë gabim, ne abonojmë ngjarje të shumta duke përfshirë raportet e dorëzimit.

producer.on('event.log', function (log) {
    console.log(log);
});

//logging all errors
producer.on('event.error', function (err) {
    console.error(err);
});

producer.on('connection.failure', function (err) {
    console.error(err);
});

producer.on('delivery-report', function (err, report) {
    console.log('Message was delivered' + JSON.stringify(report));
});

producer.on('disconnected', function (arg) {
    console.log('producer disconnected. ' + JSON.stringify(arg));
});

Një ngjarje e fundit, e cila është veçanërisht e rëndësishme për t'u përdorur, quhet on ready. Ky është momenti kur producenti është gati të dërgojë një mesazh në temë. Kjo metodë do të mbështetet në kthimin e thirrjes së ofruar nga moduli mastostream që kemi zbatuar në seksionin e mëparshëm:

producer.on('ready', async () => {
    mastostream((status) => { 
        producer.produce(
            'mastodon',  // topic to send the message to
            null,  // partition, null for librdkafka default partitioner
            Buffer.from(status),  // value
            null,  // optional key
            Date.now()  // optional timestamp
        );
        producer.flush(2000);
    }).catch((error) => {
        throw error;
    });
});

Megjithatë, asnjë nga sa më sipër nuk do të funksionojë derisa të ekzekutoni metodën connect(). Me fragmentin më poshtë, ekzekutoni kodin tuaj dhe shikoni të dhënat të fillojnë të rrjedhin!

producer.connect({}, (err) => {
    if (err) {
        console.error(err);
    }
});

Kjo metodë ka një parametër të dytë opsional, i cili është një thirrje kthimi që mund ta përdorni për t'u informuar për çdo gabim gjatë lidhjes.

Tani kemi parë të gjithë kodin dhe kemi ekzaminuar se si funksionon i gjithë së bashku. Duke ndarë shqetësimet e mbledhjes së të dhënave nga Mastodon, dhe duke ia kaluar ato Apache Kafka, ne kemi një sistem që gjithashtu mund të përshtatet për të trajtuar burime të ndryshme të të dhënave sipas nevojës.

Ç'pritet më tej

Me të dhënat që mblidhen vazhdimisht në temë, tani mund t'i përdorni si hyrje për mjete dhe baza të tjera të të dhënave, si OpenSearch®, ClickHouse® dhe PostgreSQL®. Lidhësit Apache Kafka® Connect do t'ju ndihmojnë të sillni të dhënat në sisteme të tjera pa asnjë kod të kërkuar. Mësoni më shumë rreth Apache Kafka dhe Kafka Connect dhe kontrolloni listën e plotë të lidhësve të lavamanit që janë në dispozicion në platformën Aiven për të parë se ku mund t'i sillni të dhënat për ruajtje dhe analizë të mëtejshme.

Botuar fillimisht në https://aiven.io.