Kafka生态

1、基于Kafka的商业产品

1.1 Confluent

官网地址:https://www.confluent.io/

Confluent提供了业界唯一的企业级事件流平台,Confluent Platform通过将来自多个源和位置的数据集成到公司的单个中央事件流平台中,可以轻松构建实时数据管道和流应用程序。Confluent平台使您可以专注于如何从数据中获取业务价值,而不必担心诸如在各种系统之间传输或处理数据的基本机制。具体来说,Confluent平台简化了将数据源连接到Kafka,使用Kafka构建应用程序以及保护,监视和管理Kafka基础架构的过程。

Confluent Platform(融合整体架构平台)

每个版本的Confluent平台都包括最新版本的Kafka以及其他工具和服务,这些工具和服务使构建和管理事件流平台更加容易。Confluent Platform同时提供社区和商业许可功能,可以补充和增强您的Kafka部署。

概述

Confluent平台的核心是Apache Kafka,这是最受欢迎的开源分布式流媒体平台。Kafka的主要功能是:

  • 发布和订阅记录流
  • 以容错方式存储记录流
  • 处理记录流

1.2 Cloudera Kafka

Cloudera Manager Kafka管理集群,Cloudera是开源Hadoop的贡献者

1.3 Stratio Kafka

Stratio Kafka source for ubuntu

http://repository.stratio.com/sds/1.1/ubuntu/13.10/binary/ and for RHEL http://repository.stratio.com/sds/1.1/RHEL/

1.4 IBM Event Streams

http://strimzi.io/

Apache Kafka Operator for Kubernetes and Openshift. Downloads and Helm Chart

https://github.com/strimzi/strimzi-kafka-operator/releases/latest

1.5 Strimzi

http://strimzi.io/ - Apache Kafka Operator for Kubernetes and Openshift.

Downloads and Helm Chart - https://github.com/strimzi/strimzi-kafka-operator/releases/latest

1.6 TIBCO

TIBCO Messaging - Apache Kafka Distribution - https://www.tibco.com/products/apache-kafka Downloads - https://www.tibco.com/products/tibco-messaging/downloads

2、流处理

2.1 Kafka Streams

Apache Kafka项目的内置流处理库 http://kafka.apache.org/documentation/streams/

https://cwiki.apache.org/confluence/display/KAFKA/Kafka+Streams

Stream Task Lifecycle

Stream Thread Lifecycle

2.2 Storm-流处理框架

流处理框架

2.3 Samza-基于YARN的流处理框架

Samza是近日由LinkedIn开源的一项技术,它是一个分布式流处理框架,它是基于Kafka消息队列来实现类实时的流式数据处理的,非常像Twitter的流处理系统Storm。不同的是Samza基于Hadoop,而且使用了LinkedIn自家的Kafka分布式消息系统,并使用资源管理器Apache Hadoop YARN实现容错处理、处理器隔离、安全性和资源管理。

Samza官网

中文学习网站

2.4 Storm Spout

https://github.com/HolmesNL/kafka-spout/wiki

2.5 Kafka-Storm -Kafka 0.8

Kafka-Storm -Kafka 0.8,Storm 0.9,Avro集成

2.6 SparkStreaming

Kafka接收器支持Kafka 0.8及更高版本

Apache Flink与Kafka集成

2.8 IBM Streams

具有Kafka源和接收器的流处理框架,用于使用和产生Kafka消息

2.9 Spring Cloud Stream和Spring Cloud Data Flow

3、整合Hadoop

3.1 Confluent HDFS Connector

kafka-connect-hdfs是一个Kafka连接器, 用于在Kafka和Hadoop HDFS之间复制数据。

源代码

3.2 Camus

概述

Camus是LinkedIn开发的一个简单的MapReduce作业,用于将数据从Kafka加载到HDFS中。它能够将数据从Kafka增量复制到HDFS中,这样MapReduce作业的每次运行都会在上一次运行停止的地方开始。在LinkedIn上,Camus每天用于将来自Kafka的数十亿条消息加载到HDFS中。Confluent的Camus版本与Confluent的Schema Registry集成在一起,可确保随着架构的发展而加载到HDFS时确保数据兼容性。您可以在设计部分找到Camus的设计和体系结构。

主要特征

  1. 自动主题发现:Camus作业启动后,它将自动从Zookeeper中获取可用主题,并从Kafka中获取偏移量并过滤主题。
  2. Avro模式管理:Camus与Confluent的Schema Registry集成在一起,以确保随着Avro模式的发展而兼容。
  3. 输出分区:Camus根据每个记录的时间戳自动对输出进行分区。
  4. 容错:Camus将以前的Kafka ETL请求和主题分区偏移量保存到HDFS,以提供对Zookeeper和Kafka故障的容错能力。它还使用临时工作目录来确保Kafka和HDFS之间的一致性。
  5. 可定制性:Camus的许多组件都是可定制的。Camus为消息解码器,数据写入器,数据分区器和工作分配器的定制实现提供接口。
  6. 负载平衡:Camus根据每个主题分区的大小将数据平均分配给MapReduce任务。此外,由于Camus作业使用临时工作目录,因此推测性执行对于散乱的迁移可能是有效的。
  7. 较低的操作开销:Camus提供配置以平衡主题之间的争用并在数据不兼容的情况下控制Camus作业的行为。默认情况下,如果数据不兼容,Camus不会使MapReduce作业失败。

Github地址:https://github.com/linkedin/camus

在线文档地址:https://docs.confluent.io/1.0/camus/docs/intro.html

3.3 Flume

Flume是一种分布式,可靠且可用的服务,用于有效地收集,聚合和移动大量日志数据。它具有基于流数据流的简单灵活的体系结构。它具有可调整的可靠性机制以及许多故障转移和恢复机制,具有强大的功能和容错能力。它使用一个简单的可扩展数据模型,允许在线分析应用程序。

Github地址:https://github.com/apache/flume

学习地址:https://www.iteblog.com/archives/tag/flume/

官网:http://flume.apache.org/source.html

3.4 KaBoom

概述

KaBoom-Kafka的高性能消费者客户端,KaBoom使用Krackle从Kafka中的主题分区中消费,并将其写入HDFS中的繁荣文件。

主要特征

  • 使用适用于 Apache Zookeeper的Curator框架在多个服务器之间分配工作
  • 支持通过基于Kerberos的安全模拟(方便地从Flume提取)写入受保护的Hadoop集群。
  • 从Kafka服务器故障中恢复(即使当新当选的领导人在当选时不同步)
  • 支持通过GZIP或Snappy压缩进行消费
  • 可配置:可以为每个主题配置具有日期/时间变量替换的唯一HDFS路径模板
  • 当在给定小时内已写入所有主题分区的消息时,支持将时间戳记模板HDFS目录标记为“就绪”

Github地址:https://github.com/blackberry/KaBoom

4、数据库整合

4.1 Confluent JDBC连接器

JDBC连接器

JDBC连接器允许您使用JDBC驱动程序将任何关系数据库中的数据导入Kafka主题。通过使用JDBC,此连接器可以支持各种数据库,而无需为每个数据库使用自定义代码。

通过定期执行SQL查询并为结果集中的每一行创建输出记录来加载数据。默认情况下,数据库中的所有表都被复制,每个表都复制到其自己的输出主题。监视数据库中的新表或删除表,并自动进行调整。从表复制数据时,连接器可以通过指定应使用哪些列来检测新数据或修改的数据来仅加载新行或修改的行。

特征

JDBC连接器支持复制具有多种JDBC数据类型的表,动态地从数据库中添加和删除表,白名单和黑名单,不同的轮询间隔以及其他设置。但是,对于大多数用户而言,最重要的功能是用于控制如何从数据库增量复制数据的设置。

Kafka Connect跟踪从每个表中检索到的最新记录,因此它可以在下一次迭代时(或发生崩溃的情况下)从正确的位置开始。JDBC连接器使用此功能仅在每次迭代时从表(或从自定义查询的输出)获取更新的行。支持多种模式,每种模式在检测已修改行的方式上都不同。

增量查询模式

每种增量查询模式都为每一行跟踪一组列,用于跟踪已处理的行以及哪些行是新的或已更新的行。该mode设置控制此行为,并支持以下选项:

  • 递增列:包含每一行唯一ID的单个列,其中保证较新的行具有较大的ID,即一AUTOINCREMENT列。请注意,此模式只能检测行。无法检测到对现有行的更新,因此该模式仅应用于不可变数据。在数据仓库中流化事实表时,可能会使用此模式的一个示例,因为这些表通常是仅插入的。
  • 时间戳列:在此模式下,包含修改时间戳的单个列用于跟踪上次处理数据的时间,并仅查询自该时间以来已被修改的行。请注意,由于时间戳不一定是唯一的,因此此模式不能保证所有更新的数据都将被传递:如果2行共享相同的时间戳并由增量查询返回,但是在崩溃前仅处理了一行,则第二次更新将被处理。系统恢复时未命中。
  • 时间戳和递增列:这是最健壮和准确的模式,将递增列与时间戳列结合在一起。通过将两者结合起来,只要时间戳足够精细,每个(id,时间戳)元组将唯一地标识对行的更新。即使更新在部分完成后失败,系统恢复后仍可正确检测并交付未处理的更新。
  • 自定义查询:JDBC连接器支持使用自定义查询,而不是复制整个表。对于自定义查询,只要可以将必要WHERE子句正确附加到查询中,就可以使用其他更新自动更新模式之一。或者,指定的查询可以自己处理对新更新的过滤。但是,请注意,将不会执行偏移量跟踪(与为每个记录记录incrementing和/或timestamp列值的自动模式不同 ),因此查询必须跟踪偏移量本身。
  • 批量:此模式未过滤,因此根本不增量。它将在每次迭代时从表中加载所有行。如果要定期转储整个表,最终删除条目,下游系统可以安全地处理重复项,这将很有用。

模式演变

使用Avro转换器时,JDBC连接器支持架构演变。当数据库表架构发生更改时,JDBC连接器可以检测到更改,创建新的Kafka Connect架构,并尝试在架构注册表中注册新的Avro架构。我们能否成功注册架构取决于架构注册表的兼容性级别,默认情况下该兼容性级别是向后的。

例如,如果我们从表中删除一列,则更改是向后兼容的,并且相应的Avro架构可以在架构注册表中成功注册。如果我们修改数据库表架构以更改列类型或添加列,则将Avro架构注册到架构注册表时,由于更改不向后兼容,它将被拒绝。

您可以更改架构注册表的兼容性级别,以允许不兼容的架构或其他兼容性级别。有两种方法可以做到这一点:

  • 使用设置连接器使用的主题的兼容级别 。受试者有格式,并 在被确定的配置和表名。PUT /config/(string: subject)``topic-key``topic-value``topic``topic.prefix
  • 通过avro.compatibility.level在架构注册表中进行设置,将架构注册表配置为使用其他架构兼容性级别 。请注意,这是一个全局设置,适用于架构注册表中的所有架构。

但是,由于JDBC API的限制,某些兼容的架构更改可能被视为不兼容的更改。例如,添加具有默认值的列是向后兼容的更改。但是,由于JDBC API的局限性,很难将其映射到Kafka Connect模式中正确类型的默认值,因此当前省略了默认值。含义是,即使数据库表架构的某些更改是向后兼容的,在模式注册表中注册的架构也不是向后兼容的,因为它不包含默认值。

如果JDBC连接器与HDFS连接器一起使用,则对模式兼容性也有一些限制。启用Hive集成后,要求架构兼容性必须向后,向前和完整,以确保Hive架构能够查询某个主题下的全部数据。由于某些兼容的架构更改将被视为不兼容的架构更改,因此这些更改将不起作用,因为生成的Hive架构将无法在整个数据中查询主题。

学习地址:https://docs.confluent.io/3.0.0/connect/connect-jdbc/docs/jdbc_connector.html

4.2 Oracle Golden Gate连接器

在Oracle GoldenGate中针对大数据12.2.0.1.x正式发布的Kafka处理程序在功能上与此开源组件中包含的Kafka Connect处理程序/格式化程序稍有不同。

  • 正式发布的Kafka Handler与可插拔格式化程序接口,以XML,JSON,Avro或定界文本格式将数据输出到Kafka。
  • Kafka Connect处理程序/格式化程序将构建Kafka Connect架构和结构。它依靠Kafka Connect框架在将数据传递到主题之前使用Kafka Connect转换器执行序列化。

学习地址:https://blogs.oracle.com/dataintegration/oracle-goldengate-adapter-for-confluent-platform,-powered-by-apache-kafka#

连接器下载地址:https://www.oracle.com/middleware/technologies/goldengate-exchange-downloads.html

5、搜索和查询

5.1 Elasticsearch

Elasticsearch连接器允许将数据从Kafka移动到Elasticsearch 2.x,5.x,6.x和7.x。它将数据从Kafka中的主题写入Elasticsearch中的索引,并且该主题的所有数据都具有相同的类型。

Elasticsearch通常用于文本查询,分析和作为键值存储(用例)。连接器涵盖了分析和键值存储用例。

对于分析用例,Kafka中的每条消息均被视为事件,并且连接器使用topic + partition + offset作为事件的唯一标识符,然后将其转换为Elasticsearch中的唯一文档。对于键值存储用例,它支持将Kafka消息中的键用作Elasticsearch中的文档ID,并提供配置以确保对键的更新按顺序写入Elasticsearch。

对于这两种用例,Elasticsearch的幂等写语义均确保一次交付。映射是定义文档及其包含的字段的存储和索引方式的过程。

用户可以为索引中的类型显式定义映射。当未明确定义映射时,Elasticsearch可以从数据中确定字段名称和类型,但是,某些类型(例如时间戳和十进制)可能无法正确推断。

为了确保正确推断类型,连接器提供了一项功能,可以从Kafka消息的架构中推断映射。

学习地址:https://www.confluent.io/hub/confluentinc/kafka-connect-elasticsearch

5.2 Presto

Presto是一个开放源代码的分布式SQL查询引擎,用于对大小从GB到PB的各种数据源运行交互式分析查询。Presto是专为交互式分析而设计和编写的,可在扩展到Facebook等组织规模的同时,实现商业数据仓库的速度。

见官网:https://prestodb.io/

学习地址:https://prestodb.io/docs/current/connector/kafka.html

5.3 Hive

基于Apache Hadoop™构建,提供以下功能:

  • 通过SQL轻松访问数据的工具,从而实现数据仓库任务,例如提取/转换/加载(ETL),报告和数据分析。
  • 一种将结构强加于各种数据格式的机制
  • 对文件的访问存储或者直接在Hadoop-HDFS或其它的数据存储系统,诸如Apache的HBase
  • 通过Apache Tez , Apache Spark 或 MapReduce执行查询
  • HPL-SQL的过程语言
  • 通过Hive LLAP,Apache YARN和Apache Slider进行亚秒级查询检索。

Hive官网:https://hive.apache.org/

学习地址:https://blog.csdn.net/tianyeshiye/article/details/92803064

6、管理和控制台

6.1 Kafka Manager

6.2 kafkat

6.3 Kafka Web Console

6.4 Kafka Offset Monitor

6.5 Capillary

6.7 Doctor Kafka

6.8 Cruise Control

6.9 Burrow

6.10 Chaperone

7、日志

8、kafka度量

本文分享自微信公众号 - 架构师玄学之路(andy_aty),作者:胡弦

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2020-02-09

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 微服务架构-SpringBoot2.0.3源码之web容器篇(一)

    SpringBoot高度模块化,特别适合需要高度模块化的业务项目,SpringBoot整体设计思路就是简单、高效、剥离组件、省代码。

    用户6969969
  • 我所理解的Mysql执行计划原理

    Mysql性能优化,从一名高级码农的角度,我们不能像java语言一样,通过debug来调试我们的业务SQL,那么我们怎么去验证优化之后的SQL语义呢,那...

    用户6969969
  • 微服务架构-SpringBoot2.0.3源码之web容器篇(二)

    用户6969969
  • 初识kafka

    Kafka经常用于实时流数据架构,用于提供实时分析。本篇将会简单介绍kafka以及它为什么能够广泛应用。

    用户1217611
  • Kafka架构

    首先,如果您不确定Kakfa是什么,请参阅这篇文章(http://cloudurable.com/blog/what-is-kafka/index.html)。...

    用户1263954
  • Apache Kafka内核深度剖析

    目前来说市面上可以选择的消息队列非常多,像activemq,rabbitmq,zeromq已经被大多数人耳熟能详,特别像activemq早期应用在企业中的总线通...

    ThoughtWorks
  • 什么是Kafka

    Kafka的增长是爆炸性的。财富500强企业中超过三分之一使用卡夫卡。这些公司包括十大旅游公司,十大银行中的七家,十大保险公司中的八家,十大电信公司中的九家,等...

    大数据弄潮儿
  • Kafka详细设计及其生态系统

    Kafka生态-Kafka Core,Kafka Streams,Kafka Connect,Kafka REST Proxy和Schema Registry ...

    用户1263954
  • 重磅发布:Kafka迎来1.0.0版本,正式告别四位数版本号

    Kafka 从首次发布之日起,已经走过了七个年头。从最开始的大规模消息系统,发展成为功能完善的分布式流式处理平台,用于发布和订阅、存储及实时地处理大规模流数据。...

    Spark学习技巧
  • Kafka实战(七) - 优雅地部署 Kafka 集群

    既然是集群,必然有多个Kafka节点,只有单节点构成的Kafka伪集群只能用于日常测试,不可能满足线上生产需求。 真正的线上环境需要考量各种因素,结合自身的业务...

    JavaEdge

扫码关注云+社区

领取腾讯云代金券