Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Apache Kafka ® Rethinked: From Simple Messaging to a Streaming Data Platform

Apache Kafka ® Rethinked: From Simple Messaging to a Streaming Data Platform

Ricardo Ferreira

December 07, 2018
Tweet

More Decks by Ricardo Ferreira

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. 6 6 Clicks em Páginas Web { “time”: 1501343063, “user_id”:

    192455, “product_id”: 367, “page”: “/product/detail/367” . . . }
  4. @rmoff / Embrace the Anarchy—Apache Kafka's Role in Modern Data

    Architectures 11 Batch é Latência Introduzida por Padrão!
  5. 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
  6. 16 16 Escalabilidade via Sistema de Arquivos • Throughput de

    centenas de MB/s • Maior densidade: TB por Servidor • Hardware mais Barato!
  7. 18 18 Garantias de um Banco de Dados • Ordenação

    • Persistência • Replicação • Tolera Falhas • Particionamento • Elasticidade
  8. 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
  9. 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
  10. 22 22 Produzindo Registros no Kafka – Sem Chave Tempo

    Mensagens serão produzidas num modelo round robin.
  11. 23 23 Produzindo Registros no Kafka – Com Chave Tempo

    A B C D hash(key) % numPartitions = N
  12. 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
  13. 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
  14. 26 26 Garantias do Produtor P Broker 1 Broker 2

    Broker 3 Topic1 partition1 Leader Follower Topic1 partition1 Topic1 partition1 Producer Properties acks=0
  15. 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
  16. 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
  17. 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
  18. 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!
  19. 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!
  20. 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
  21. 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
  22. 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)
  23. 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
  24. 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
  25. 50 50 5 0 Você acha mesmo que era uma

    tabela sendo consultada?
  26. @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
  27. 52 52 O que é Processamento de Streams? Filtro, agregação,

    correlação, adaptação de eventos em tempo real!
  28. 54 54 CEP não Endereça… • Particionamento & Escalabilidade •

    Tolerância a Falhas • Estado em Memória • Manipulação de Janelas de Tempo • Reprocessamento
  29. 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? ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑
  30. 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?
  31. 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
  32. 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
  33. 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
  34. Escolha o que é Melhor para seu Perfil KSQL CREATE

    STREAM fraudulent_payments AS SELECT * FROM payments WHERE fraudProbability >0.8; streams vs.
  35. 64 Confidential • Streams API: DSL Simples e Intuitiva KStream<Integer,

    Integer> input = builder.stream("numbers-topic"); // Stateless computation KStream<Integer, Integer> doubled = input.mapValues(v -> v * 2); // Stateful computation KTable<Integer, Integer> 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
  36. 65 Confidential • Streams API: Programação Imperativa class PrintToConsoleProcessor implements

    Processor<K, V> { @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.
  37. 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.
  38. CREATE STREAM SYSLOG_INVALID_USERS AS SELECT HOST, MESSAGE FROM SYSLOG WHERE

    MESSAGE LIKE '%Invalid user%'; KSQL: Monitoração de Streams
  39. 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
  40. 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
  41. 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
  42. 74 Enriquecimento de Streams em Tempo Real order events customer

    Stream Processin g customer orders RDBM S <y>
  43. 75 Transforme uma Vez, Reutilize Várias Vezes order events customer

    Stream Processin g customer orders RDBM S <y> New App <x>
  44. 76 Transforme uma Vez, Reutilize Várias Vezes order events customer

    Stream Processin g customer orders RDBM S <y> HDFS / S3 / etc New App <x>
  45. 79 Evolução de Sistemas: Dados muito bem Guardados Stream Processing

    RDBM S Existin g App New App <x> New App <y>