Slide 1

Slide 1 text

Apache Kafka® Rethinked: From Simple Messaging to a Streaming Data Platform São Paulo Apache Kafka Meetup Dec 07th, 2018 | Ricardo Ferreira [email protected] @riferrei

Slide 2

Slide 2 text

Name Motion (X) Motion (Y) Motion (Z) Alice -45 0 12 Bob 1 -185 -90 John 0 -1 90 Steve -180 0 180 Number X Y Z 1 1 0 0 2 1 -90 1 3 -180 0 180 4 1 90 -1 Eventos do Celular Números Achando o Número "3" Tempo

Slide 3

Slide 3 text

https://bit.ly/2zCjHG8

Slide 4

Slide 4 text

4 Você acha mesmo que era uma tabela sendo consultada?

Slide 5

Slide 5 text

“ O Mundo é Baseado em Streams de Eventos

Slide 6

Slide 6 text

6 6 Clicks em Páginas Web { “time”: 1501343063, “user_id”: 192455, “product_id”: 367, “page”: “/product/detail/367” . . . }

Slide 7

Slide 7 text

7 7 Sensores

Slide 8

Slide 8 text

8 8 Logs

Slide 9

Slide 9 text

9 9 Bases de Dados

Slide 10

Slide 10 text

“ Mas ainda existe muito Batch…

Slide 11

Slide 11 text

@rmoff / Embrace the Anarchy—Apache Kafka's Role in Modern Data Architectures 11 Batch é Latência Introduzida por Padrão!

Slide 12

Slide 12 text

12 12 Hoje é uma Bagunça! Data Warehouse Hadoop NoSQL SFDC Logging Bloomberg …any sink/source …and more OLTP ActiveMQ App App Caches OLTP OLTP App App App Web Custom Apps Microservices Monitoring Analytics

Slide 13

Slide 13 text

13 13 Solução: Streaming Data Platform

Slide 14

Slide 14 text

“ Conheça o Apache Kafka

Slide 15

Slide 15 text

15 15 Produtores Brokers Consumidores

Slide 16

Slide 16 text

16 16 Escalabilidade via Sistema de Arquivos • Throughput de centenas de MB/s • Maior densidade: TB por Servidor • Hardware mais Barato!

Slide 17

Slide 17 text

17 17 O “Pulo do Gato”: Armazenamento via Journaling Tempo O(1)

Slide 18

Slide 18 text

18 18 Garantias de um Banco de Dados • Ordenação • Persistência • Replicação • Tolera Falhas • Particionamento • Elasticidade

Slide 19

Slide 19 text

“ É bom mesmo? Posso Confiar?

Slide 20

Slide 20 text

20 20 Mais de 1 petabyte de dados no Kafka Cerca de 1.2 trilhões de mensagens por dia Milhares de streams de dados Fonte de todos os data warehouses & dados Hadoop Cerca de 300 bilhões de eventos de usuário por dia

Slide 21

Slide 21 text

21 21 A Adoção de Kafka têm sido Fenomenal! Serviços Financeiros Empresas de Tecnologia Tecnologia para Consumidores Media e Entretenimento Telecom Verejo Viagens e Hotéis

Slide 22

Slide 22 text

22 22 Produzindo Registros no Kafka – Sem Chave Tempo Mensagens serão produzidas num modelo round robin.

Slide 23

Slide 23 text

23 23 Produzindo Registros no Kafka – Com Chave Tempo A B C D hash(key) % numPartitions = N

Slide 24

Slide 24 text

24 24 Estado da Arte sobre Sistemas Distribuídos: Partições e Replicação Broker 1 Topic1 partition1 Broker 2 Broker 3 Broker 4 Topic1 partition1 Topic1 partition1 Leader Follower Topic1 partition2 Topic1 partition2 Topic1 partition2 Topic1 partition3 Topic1 partition4 Topic1 partition3 Topic1 partition3 Topic1 partition4 Topic1 partition4

Slide 25

Slide 25 text

25 25 Estado da Arte sobre Sistemas Distribuídos: Partições e Replicação Broker 1 Topic1 partition1 Broker 2 Broker 3 Broker 4 Topic1 partition1 Topic1 partition1 Leader Follower Topic1 partition2 Topic1 partition2 Topic1 partition2 Topic1 partition3 Topic1 partition4 Topic1 partition3 Topic1 partition3 Topic1 partition4 Topic1 partition4

Slide 26

Slide 26 text

26 26 Garantias do Produtor P Broker 1 Broker 2 Broker 3 Topic1 partition1 Leader Follower Topic1 partition1 Topic1 partition1 Producer Properties acks=0

Slide 27

Slide 27 text

27 27 Garantias do Produtor P Broker 1 Broker 2 Broker 3 Topic1 partition1 Leader Follower Topic1 partition1 Topic1 partition1 ack Producer Properties acks=1

Slide 28

Slide 28 text

28 28 Garantias do Produtor P Broker 1 Broker 2 Broker 3 Topic1 partition1 Leader Follower Topic1 partition1 Topic1 partition1 Producer Properties acks=all min.insync.replica=2 First copy returns ack ack

Slide 29

Slide 29 text

29 29 Garantias do Produtor: Sem Exactly-Once P Broker 1 Broker 2 Broker 3 Topic1 partition1 Leader Follower Topic1 partition1 Topic1 partition1 Producer Properties acks=all min.insync.replic a=2 {key: 1234 data: abcd} - offset 3345 Failed ack Successful write

Slide 30

Slide 30 text

30 30 Garantias do Produtor: Sem Exactly-Once P Broker 1 Broker 2 Broker 3 Topic1 partition1 Leader Follower Topic1 partition1 Topic1 partition1 Producer Properties acks=all min.insync.replica=2 {key: 1234, data: abcd} - offset 3345 {key: 1234, data: abcd} - offset 3346 retry ack dupe!

Slide 31

Slide 31 text

31 31 Garantias do Produtor: Com Exatly-Once P Broker 1 Broker 2 Broker 3 Topic1 partition1 Leader Follower Topic1 partition1 Topic1 partition1 Producer Properties enable.idempotence=true max.inflight.requests.per.connection=1 acks = “all” retries > 0 (preferably MAX_INT) (pid, seq) [payload] (100, 1) {key: 1234, data: abcd} - offset 3345 (100, 1) {key: 1234, data: abcd} - rejected, ack re-sent (100, 2) {key: 5678, data: efgh} - offset 3346 retry ack no dupe!

Slide 32

Slide 32 text

32 32 Consumindo Registros do Kafka: Único Consumidor C

Slide 33

Slide 33 text

33 33 Consumindo Registros do Kafka: Vários Consumidores C C C1 C C C2

Slide 34

Slide 34 text

34 34 Consumindo Registros do Kafka: Vários Consumidores C C C C

Slide 35

Slide 35 text

“ Lidando com Dados no Apache Kafka

Slide 36

Slide 36 text

36 Confidential API de Cliente (Produtores e Consumidores) Clientes Nativos do Apache Kafka Clientes Nativos da Confluent Clientes Suportados pela Comunidade Proxy http/REST stdin/stdout

Slide 37

Slide 37 text

37 Confidential REST Proxy: Solução para Clientes Não-Nativos REST Proxy Aplicações Não-Baseadas em Java Aplicações Baseadas em Java Schema Registry REST / HTTP Escala horizontalmente Simplifica a produção e consumo de registros Provê uma interface RESTful para o Kafka

Slide 38

Slide 38 text

38 38 Simplificando mais Ainda: Conectores!

Slide 39

Slide 39 text

39 39 Apache Kafka™ Connect API – Streaming Data Capture JDBC Mongo MySQL Elastic Cassandra HDFS Kafka Connect API Kafka Pipeline Conector Conector Conector Conector Conector Conector Source s Sinks Tolerante a Falhas Centenas de Sources e Sinks pré- implementados Preserva o schema / DDL Parte do projeto Apache Kafka Integrado com o C3 (Confluent Control Center)

Slide 40

Slide 40 text

40 Básico de Kafka Connect API

Slide 41

Slide 41 text

41 Básico de Kafka Connect API

Slide 42

Slide 42 text

42 Básico de Kafka Connect API

Slide 43

Slide 43 text

43 Básico de Kafka Connect API

Slide 44

Slide 44 text

44 Básico de Kafka Connect API

Slide 45

Slide 45 text

45 Kafka Connect: Conectores Conectores são componenes reutilizáveis que sabem como falar com sources e sinks específicos.

Slide 46

Slide 46 text

46 Kafka Connect: Conectores Eles modificam a estrutura das chaves e valores, tópicos, e partições de um registro de um source ou sink

Slide 47

Slide 47 text

“ Como lidar com evolução de Schemas?

Slide 48

Slide 48 text

48 48 Confluent: Schema Registry Elastic Cassandra HDFS Consumidores Serializer App 1 Serializer App 2 ! Tópico Kafka ! Schema Registry Define os campos esperados para cada tópico Lida automaticamente com mudanças de schemas Prevê problemas de retro-compatibilidade Suporta ambientes multi-datacenter

Slide 49

Slide 49 text

“ Legal… mas e os Streams?

Slide 50

Slide 50 text

50 50 5 0 Você acha mesmo que era uma tabela sendo consultada?

Slide 51

Slide 51 text

@rmoff / Embrace the Anarchy—Apache Kafka's Role in Modern Data Architectures 51 The truth is the log. The database is a cache of a subset of the log. —Pat Helland Immutability Changes Everything http://cidrdb.org/cidr2015/Papers/CIDR15_Paper16.pdf

Slide 52

Slide 52 text

52 52 O que é Processamento de Streams? Filtro, agregação, correlação, adaptação de eventos em tempo real!

Slide 53

Slide 53 text

“ Tipo CEP?

Slide 54

Slide 54 text

54 54 CEP não Endereça… • Particionamento & Escalabilidade • Tolerância a Falhas • Estado em Memória • Manipulação de Janelas de Tempo • Reprocessamento

Slide 55

Slide 55 text

55 55 A Dualidade entre Streams e Tabelas http://www.confluent.io/blog/introducing-kafka-streams-stream-processing-made-simple http://docs.confluent.io/current/streams/concepts.html#duality-of-streams-and-tables

Slide 56

Slide 56 text

56 56 Os dados são os mesmos, porém com interpretações diferentes! alice San Francisco alice New York City alice Rio de Janeiro alice Sydney alice Beijing alice Paris alice Berlin Cenário 1: Status da Milhagem? Cenário 2: Localização Atual? ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑

Slide 57

Slide 57 text

57 57 Os dados são os mesmos, porém com interpretações diferentes! alice San Francisco alice New York City alice Rio de Janeiro alice Sydney alice Beijing alice Paris alice Berlin ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ Cenário 1: Status da Milhagem? Cenário 2: Localização Atual?

Slide 58

Slide 58 text

58 58 Os dados são os mesmos, porém com interpretações diferentes! “Alice has been to SFO, NYC, Rio, Sydney, Beijing, Paris, and finally Berlin.” “Alice is in SFO, NYC, Rio, Sydney, Beijing, Paris, Berlin right now.” ⚑ ⚑ ⚑⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑⚑ ⚑ ⚑ ⚑ Cenário 1: Status da Milhagem? Cenário 2: Localização Atual? KStream KTable

Slide 59

Slide 59 text

“ Processamento de Streams com Kafka

Slide 60

Slide 60 text

60 60 Streaming Data Platform

Slide 61

Slide 61 text

Processamento de Streams para as Massas! População de Usuários Sofisticação do Código Core developers Core developers who don’t use Java/Scala Data engineers, architects, DevOps/SRE BI analysts streams

Slide 62

Slide 62 text

Processamento de Streams para as Massas! População de Usuários Sofisticação do Código Core developers Core developers who don’t use Java/Scala Data engineers, architects, DevOps/SRE BI analysts streams

Slide 63

Slide 63 text

Escolha o que é Melhor para seu Perfil KSQL CREATE STREAM fraudulent_payments AS SELECT * FROM payments WHERE fraudProbability >0.8; streams vs.

Slide 64

Slide 64 text

64 Confidential • Streams API: DSL Simples e Intuitiva KStream input = builder.stream("numbers-topic"); // Stateless computation KStream doubled = input.mapValues(v -> v * 2); // Stateful computation KTable sumOfOdds = input .filter((k,v) -> v % 2 != 0) .selectKey((k, v) -> 1) .groupByKey() .reduce((v1, v2) -> v1 + v2, "sum-of-odds"); API preferida para maioria dos casos The DSL particularly appeals to users: • Familiar para desenvolvedores que vem de Apache Spark e Flink. • Bom também para quaquer pessoa que seja fâ de programação funcional

Slide 65

Slide 65 text

65 Confidential • Streams API: Programação Imperativa class PrintToConsoleProcessor implements Processor { @Override public void init(ProcessorContext context) {} @Override void process(K key, V value) { System.out.println("Received record with " + "key=" + key + " and value=" + value); } @Override void punctuate(long timestamp) {} @Override void close() {} } Mais flexibilidade = Mais Código! The Processor API appeals to users: • Familiar para desenvolvedores que vem de Apache Storm e Samza. • Interessante se requer alguma feature que ainda não está presenta na DSL.

Slide 66

Slide 66 text

KSQL CREATE STREAM fraudulent_payments AS SELECT * FROM payments WHERE fraudProbability > 0.8; • Escreva apenas SQL. Nada de Java, C++, Python ou coisas mais complexas. • Crie UDFs KSQL caso precise de lógicas mais complexas.

Slide 67

Slide 67 text

CREATE STREAM SYSLOG_INVALID_USERS AS SELECT HOST, MESSAGE FROM SYSLOG WHERE MESSAGE LIKE '%Invalid user%'; KSQL: Monitoração de Streams

Slide 68

Slide 68 text

CREATE TABLE possible_fraud AS SELECT card_number, count(*) FROM authorization_attempts WINDOW TUMBLING (SIZE 5 SECONDS) GROUP BY card_number HAVING count(*) > 3; KSQL: Detecção de Anomalias

Slide 69

Slide 69 text

CREATE STREAM vip_actions AS SELECT userid, page, action FROM clickstream c LEFT JOIN users u ON c.userid = u.user_id WHERE u.level = 'Platinum'; KSQL: Streaming ETL

Slide 70

Slide 70 text

Como Executar o KSQL? JVM KSQL Server KSQL UI / CLI / REST JVM KSQL Server JVM KSQL Server Kafka Cluster KSQL não gera overhead nos brokers

Slide 71

Slide 71 text

“ Casos de Uso com Kafka

Slide 72

Slide 72 text

72 Database Offload de Analytics HDFS / S3 / BigQuery etc RDBMS CDC

Slide 73

Slide 73 text

73 Processamento de Streams usando KSQL order events customer customer orders Stream Processing RDBM S CDC

Slide 74

Slide 74 text

74 Enriquecimento de Streams em Tempo Real order events customer Stream Processin g customer orders RDBM S

Slide 75

Slide 75 text

75 Transforme uma Vez, Reutilize Várias Vezes order events customer Stream Processin g customer orders RDBM S New App

Slide 76

Slide 76 text

76 Transforme uma Vez, Reutilize Várias Vezes order events customer Stream Processin g customer orders RDBM S HDFS / S3 / etc New App

Slide 77

Slide 77 text

78 Evolução de Sistemas: Dados muito bem Guardados Stream Processing RDBM S Existin g App New App

Slide 78

Slide 78 text

79 Evolução de Sistemas: Dados muito bem Guardados Stream Processing RDBM S Existin g App New App New App

Slide 79

Slide 79 text

80 Obrigado! @riferrei

Slide 80

Slide 80 text

“ E mais um presente da Confluent…

Slide 81

Slide 81 text

82 Livros de Graça! https://www.confluent.io/apache-kafka-stream-processing-book- bundle