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

02ff2dde723b6e26f4ef03ee6b3f6eb9?s=128

Ricardo Ferreira

December 07, 2018
Tweet

Transcript

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

    Platform São Paulo Apache Kafka Meetup Dec 07th, 2018 | Ricardo Ferreira ricardo@confluent.io @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. https://bit.ly/2zCjHG8

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

  5. “ O Mundo é Baseado em Streams de Eventos

  6. 6 6 Clicks em Páginas Web { “time”: 1501343063, “user_id”:

    192455, “product_id”: 367, “page”: “/product/detail/367” . . . }
  7. 7 7 Sensores

  8. 8 8 Logs

  9. 9 9 Bases de Dados

  10. “ Mas ainda existe muito Batch…

  11. @rmoff / Embrace the Anarchy—Apache Kafka's Role in Modern Data

    Architectures 11 Batch é Latência Introduzida por Padrão!
  12. 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
  13. 13 13 Solução: Streaming Data Platform

  14. “ Conheça o Apache Kafka

  15. 15 15 Produtores Brokers Consumidores

  16. 16 16 Escalabilidade via Sistema de Arquivos • Throughput de

    centenas de MB/s • Maior densidade: TB por Servidor • Hardware mais Barato!
  17. 17 17 O “Pulo do Gato”: Armazenamento via Journaling Tempo

    O(1)
  18. 18 18 Garantias de um Banco de Dados • Ordenação

    • Persistência • Replicação • Tolera Falhas • Particionamento • Elasticidade
  19. “ É bom mesmo? Posso Confiar?

  20. 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
  21. 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
  22. 22 22 Produzindo Registros no Kafka – Sem Chave Tempo

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

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

    Broker 3 Topic1 partition1 Leader Follower Topic1 partition1 Topic1 partition1 Producer Properties acks=0
  27. 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
  28. 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
  29. 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
  30. 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!
  31. 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!
  32. 32 32 Consumindo Registros do Kafka: Único Consumidor C

  33. 33 33 Consumindo Registros do Kafka: Vários Consumidores C C

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

    C C
  35. “ Lidando com Dados no Apache Kafka

  36. 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
  37. 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
  38. 38 38 Simplificando mais Ainda: Conectores!

  39. 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)
  40. 40 Básico de Kafka Connect API

  41. 41 Básico de Kafka Connect API

  42. 42 Básico de Kafka Connect API

  43. 43 Básico de Kafka Connect API

  44. 44 Básico de Kafka Connect API

  45. 45 Kafka Connect: Conectores Conectores são componenes reutilizáveis que sabem

    como falar com sources e sinks específicos.
  46. 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
  47. “ Como lidar com evolução de Schemas?

  48. 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
  49. “ Legal… mas e os Streams?

  50. 50 50 5 0 Você acha mesmo que era uma

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

    correlação, adaptação de eventos em tempo real!
  53. “ Tipo CEP?

  54. 54 54 CEP não Endereça… • Particionamento & Escalabilidade •

    Tolerância a Falhas • Estado em Memória • Manipulação de Janelas de Tempo • Reprocessamento
  55. 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

  56. 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? ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑ ⚑
  57. 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?
  58. 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
  59. “ Processamento de Streams com Kafka

  60. 60 60 Streaming Data Platform

  61. 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
  62. 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
  63. Escolha o que é Melhor para seu Perfil KSQL CREATE

    STREAM fraudulent_payments AS SELECT * FROM payments WHERE fraudProbability >0.8; streams vs.
  64. 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
  65. 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.
  66. 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.
  67. CREATE STREAM SYSLOG_INVALID_USERS AS SELECT HOST, MESSAGE FROM SYSLOG WHERE

    MESSAGE LIKE '%Invalid user%'; KSQL: Monitoração de Streams
  68. 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
  69. 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
  70. 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
  71. “ Casos de Uso com Kafka

  72. 72 Database Offload de Analytics HDFS / S3 / BigQuery

    etc RDBMS CDC
  73. 73 Processamento de Streams usando KSQL order events customer customer

    orders Stream Processing RDBM S CDC
  74. 74 Enriquecimento de Streams em Tempo Real order events customer

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

    Stream Processin g customer orders RDBM S <y> New App <x>
  76. 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>
  77. 78 Evolução de Sistemas: Dados muito bem Guardados Stream Processing

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

    RDBM S Existin g App New App <x> New App <y>
  79. 80 Obrigado! @riferrei

  80. “ E mais um presente da Confluent…

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