Apache Kafka – zjištění údajů o konzumentovi

Při asynchroním posílání zpráv je občas důležité vědět, kolik zpráv bylo přijato, kolik zpráv ještě čeká na zpracování atd. Pokud navážu na předchozí příspěvek, kde jsme si vytvořili test-topic a poslali do něj několik zpráv, můžeme k tomuto účelu použít script bin/kafka-consumer-groups.sh. Ten nám zobrazí údaje pro určitou consumer group. Konzumentská skupina (consumer group) sdružuje konzumenty (consumers).

Konzumenta, který patří do určité skupiny vytvoříte pomocí volby --group

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test-topic --group test-group --from-beginning

Pokud pošlete do tématu (topic) několik zpráv a zavoláte skript, uvidíte základní údaje. Bylo posláno pět zpráv a všechny byly zkonzumovány.

Číst dálApache Kafka – zjištění údajů o konzumentovi

Základy Apache Kafky

Apache Kafka se používá pro asynchronní posílání zpráv. V tomto příspěvku ukáži instalaci na Linux a základní práci – vytvoření téma (topic) a posílání a přijímání zpráv.

Stáhněte si Kafku a rozbalte stažený soubor (tar -xzf kafka_verze.tgz). Přesuňte se do rozbaleného adresáře. Všechny důležité skripty naleznete v adresáři bin.

Kafka používá ZooKeeper. To je služba, která udržuje informace o konfiguraci v distribuovaném prostředí. Nejdříve je tedy potřeba spustit ZooKeeper server.

bin/zookeeper-server-start.sh config/zookeeper.properties

Číst dálZáklady Apache Kafky

Redis databáze

Redis databáze (jedna instance Redisu) by se měly používat pro oddělení různých klíčů patřících stejné aplikaci a nikoliv pro různé klíče různých aplikací.

Počet databází v Redisu je uveden v konfiguračním souboru /etc/redis/redis.conf.

# Set the number of databases. The default database is DB 0, you can select
# a different one on a per-connection basis using SELECT  where
# dbid is a number between 0 and 'databases'-1
databases 16

V redis-cli tento údaj můžete získat příkazem

127.0.0.1:6378> config get databases
1) "databases"
2) "16"

Číst dálRedis databáze

OAuth2

V rámci OAuth2 existují čtyři základní entity:

  • resource owner (uživatel) – vlastník dat
  • resource server (služba) – tam, kde jsou uložena vlastníkova data
  • authorization server (autorizační server) – server, který vydává přistupový token (access token)
  • client application (klientská aplikace) – aplikace, která přistupuje k datům vlastníka (uživatele)

Průběh získání přístupu pro klientskou aplikaci

Klientská aplikace (KA) požádá autorizační server (AS) o přístupový token, kterým se bude následně prokazovat na resource serveru (RS). AS musí ověřit, že uživatel je srozuměn a dává souhlas. To probíhá tak, že KA přesměruje uživatele na AS, kde se uživateli zobrazí přihlášení.

Pokud uživatel zadá správná data, pošle AS na KA přístupový token. KA pak pošle požadavek na RS a přiloží v žádosti tento přístupový token. RS tento token pošle na AS k ověření. AS v odpovědi vrací, zda je token platný a jaká oprávnění se k tomuto token vztahují. To znamená, co vše má KA povoleno.

Pokud je vše v pořádku a KA žádá o data, která má od uživatele povoleny, RS vrací požadovaná data.


Hledáte jednoduché a popisné vysvětlení jak funguje OAuth2? K tomuto tématu jsem narazil na tento příspěvek.

Hezké vysvětlení v češtině (ale bez obrázků) naleznete na stránkách ČVUT.

Programujeme v Minecraftu: Nastavení a první projekt

Máte rádi Minecraft? A chcete si jej přizpůsobit? V tomto příspěvku ukáži, jak si nastavit Minecraft tak, abyste v něm mohli „programovat“ a zároveň vytvoříme první jednoduchý projekt. Budete k tomu potřebovat Minecraft for Windows (nebo Minecraft Education Edition). Bohužel v Minecraft Java Version toto nefunguje (pokud jste Minecraft Java Version kupovali před listopadem 2018, je možné, že Minecraft for Windows můžete získat zdarma). Také si stáhněte Code Connection for Minecraft (je zdarma).

Spusťte Minecraft a vytvořte si nový svět, kde povolíte cheatování.

Číst dálProgramujeme v Minecraftu: Nastavení a první projekt

Velitelství kybernetických a informačních operací

Česká armáda buduje Velitelství kybernetických a informačních operací, které by mělo mít čtyři prvky: CIRC, kybernetickou obranu, informační operace a podporu. Nové velitelství už má přes půl roku i svůj profil na Facebooku. Zatím tam jsou dva příspěvky. Mě zaujal ten první, známý každému, kdo zkoušel programovat: Hello world! Jen doufám, že kvalita prezentace na sociální síti nemá nic společného s kvalitou činnosti velitelství.

Co je to socket

Pokud jste četli něco o internetu, nebo o linuxu, pravděpodobně jste narazili na slovo socket. Víte ale co tento termín znamená?

TCP socket je koncový bod (endpoint) spojení. Je definován IP adresou a portem. Port je identifikátor konkrétní služby (programu). Cílem portu je rozlišit mezi více koncovými body na stejné IP adrese. Ve stejný čas může existovat pouze jeden socket pro IP a port, ale může existovat více spojení. TCP spojení je definováno dvěma koncovými body (endpointy, sockety)

It is the socket pair (the 4-tuple consisting of the client IP address, client port number, server IP address, and server port number) that specifies the two endpoints that uniquely identifies each TCP connection in an internet. (TCP-IP Illustrated Volume 1, W. Richard Stevens)

In most C-derived languages, TCP connections are established and manipulated using methods on an instance of a Socket class.
https://stackoverflow.com/…/what-is-the-difference-between-a-port-and-a-socket

Unix domain socket (IPC socket – inter-process communication socket) je koncový bod pro datovou komunikaci mezi procesy na stejném operačním systému. Je to způsob, jak procesy na stejném stroji mohou mezi sebou komunikovat. A jelikož v linuxu je vše buď adresář nebo soubor, socket je soubor (speciální soubor).

When Unix programs do any sort of I/O, they do it by reading or writing to a file descriptor. A file descriptor is simply an integer associated with an open file. But (and here’s the catch), that file can be a network connection, a FIFO, a pipe, a terminal, a real on-the-disk file, or just about anything else. Everything in Unix is a file! So when you want to communicate with another program over the Internet you’re gonna do it through a file descriptor, you’d better believe it.
http://beej.us/guide/bgnet/html/#what-is-a-socket

Obecně řečeno je tedy socket endpoint sloužící pro komunikaci. Mohli jste ale ještě narazit na slovo WebSocket. To je jiný příběh. WebSocket je komunikační protokol, umožnující obousměrnou full-duplex komunikaci, který je umístěn v 7 vrstvě OSI modelu (podobně jako HTTP protokol).

Další zdroje: Unix domain socket, WebSocket

Co znamená WIP v názvu větve

Pokud v rámci GitLabu nebo GitHubu nazvete větev s prefixem WIP a mezerou, půjde na tuto větev udělat merge request, ale nebude ji možné mergnout. WIP v tomto případě znamená Work In Progress. Tato vlastnost má výhodu v tom, že můžete ukázat aktuální stav ve své větvi tak, aby ostatní viděli vaše změny (diff), ale nechcete, aby tyto změny byly sloučeny (merge). Pokud byste vytvořili merge request a pouze tam přidali komentář, je možné, že by si ho někdo z kolegů nevšiml, a vaši práci mergnul.

Zdroj: stackoverflow.com/…/github-what-is-a-wip-branch

Nejdou posílat maily z aplikace běžící na lokálním počítači

Máte vlastní aplikaci, kterou vyvíjíte na svém počítači. Z této aplikace chcete posílat maily na nějaký externí SMTP server. Vše máte nakonfigurováno správně, ale přesto maily neodchází. Dostáváte podobnou chybu (aplikace používají Spring se snaží odeslat email přes Google SMTP)?:

Číst dálNejdou posílat maily z aplikace běžící na lokálním počítači