Kafka 多话题消费者

本文介绍了如何配置 Kafka 多主题消费者,包括使用者组、多线程处理、安全设置(SSL、Kerberos)以及数据格式处理。同时,讨论了偏移量管理、记录标头属性和卡夫卡配置属性的使用,强调了安全连接到 Kafka 的多种方法。
摘要由CSDN通过智能技术生成

卡夫卡多主题消费者

支持的管道类型:
  • 数据收集器

卡夫卡多主题消费者源从阿帕奇卡集群中的多个主题读取数据。源可以使用多个线程来启用数据的并行处理。如果愿意,您可以使用 Kafka 使用者通过单个线程从单个主题读取数据。

配置 Kafka 多主题使用者时,可以配置使用者组名称和要使用的代理。您还可以指定要处理的主题和要使用的线程数。在 Kafka 中,请确保分区分配策略已正确配置。

您可以将源配置为在消息包含多个对象时生成单个记录。您可以根据需要添加其他卡夫卡配置属性,包括卡夫卡安全功能。

处理 Avro 数据时,可以将 Kafka 多主题使用者配置为使用融合架构注册表。融合模式注册表是 Avro 模式的分布式存储层,它使用 Kafka 作为其底层存储机制。

Kafka 多主题使用者包括记录标头属性,使您能够在管道处理中使用有关记录的信息。

胶印管理

使用者组标识的 Kafka 多主题使用者源首次收到来自某个主题的消息时,将为该使用者组和主题创建偏移条目。偏移条目是在卡夫卡中创建的。

Kafka 多主题使用者源根据存储的偏移条目是否存在开始在主题中接收消息:

无存储偏移

当使用者组和主题组合没有以前存储的偏移量时,Kafka 多主题使用者源使用“自动偏移重置”属性来确定要读取的第一条消息。您可以将源设置为从最早的消息、最新消息或特定时间戳开始读取主题中的消息。默认设置是最早的消息,这将导致源读取主题中的所有现有消息。

以前存储的偏移量

当使用者组和主题组合具有先前存储的偏移量时,Kafka 多主题使用者源将接收从存储的偏移量之后的下一个未处理消息开始的消息。例如,停止并重新启动管道时,处理将从上次提交的偏移量恢复。

多线程处理

Kafka 多主题使用者源执行并行处理,并支持创建多线程管道。Kafka 多主题使用者源根据“线程数”属性和 Kafka 群集中定义的分区分配策略使用多个并发线程。

重要:在 Kafka 中,确保分区分配策略设置为要使用的策略。例如,在 Kafka 0.10.1 中,可以将分区分配策略属性设置为范围或圆形。有关这些策略的详细信息,请参阅  Kafka 文档

执行多线程处理时,Kafka 多主题使用者源会检查要处理的主题列表并创建指定数量的线程。每个线程都连接到 Kafka,并根据 Kafka 分区分配策略从代理分配的分区创建一批数据。然后,它将批处理传递给可用的管道运行程序。

管道运行程序是无源管道实例 - 管道的实例,包括管道中的所有处理器和目标,并表示源之后的所有管道处理。每个管道运行程序一次处理一个批处理,就像在单个线程上运行的管道一样。当数据流变慢时,管道运行器会闲置等待,直到需要它们,并定期生成一个空批处理。可以配置“运行器空闲时间”管道属性以指定间隔或选择退出空批处理生成。

多线程管道保留每个批处理中的记录顺序,就像单线程管道一样。但是,由于批处理由不同的管道运行程序处理,因此无法确保将批处理写入目标的顺序。

例如,假设您将“线程数”属性设置为 5。启动管道时,源将创建五个线程,数据收集器将创建匹配数量的管道运行程序。根据 Kafka 分区分配策略,将线程分配给不同的分区。接收到数据后,源将一个批处理传递给每个管道运行器进行处理。

在任何给定时刻,五个管道运行程序可以分别处理一个批处理,因此此多线程管道一次最多可以处理五个批处理。当传入数据变慢时,管道运行程序将处于空闲状态,一旦数据流增加,就可以使用。

有关多线程管道的更多信息,请参见多线程管道概述。有关卡夫卡分区分配策略的详细信息,请参阅卡夫卡文档

其他卡夫卡属性

您可以将自定义卡夫卡配置属性添加到卡夫卡多主题使用者。

添加 Kafka 配置属性时,请输入确切的属性名称和值。Kafka 多主题使用者不会验证属性名称或值。

注意:卡夫卡多主题使用者源使用以下卡夫卡配置属性。源忽略以下属性的用户定义值:
  • auto.commit.interval.ms
  • 引导服务器
  • 启用自动提交
  • group.id
  • 最大投票记录

记录标头属性

Kafka 多主题使用者源创建记录标头属性,其中包含有关记录的原始文件的信息。当源处理 Avro 数据时,它将 Avro 架构包含在 avroSchema 记录标头属性中。

您可以使用记录:属性记录:属性或默认值函数来访问属性中的信息。有关使用记录标头属性的详细信息,请参阅使用标头属性

Kafka 多主题使用者源创建以下记录标头属性:
  • avroSchema - 在处理 Avro 数据时,提供 Avro schema.
  • 偏移量 - 记录源自的偏移量。
  • 分区 - 记录源自的分区。
  • 主题 - 记录源自的主题。

启用安全性

您可以将卡夫卡多主题消费者源配置为通过 SSL/TLS 和/或 Kerberos 安全地连接到卡夫卡。

启用 SSL/红绿灯系统

执行以下步骤,使卡夫卡多主题消费者源能够使用 SSL/TLS 连接到卡夫卡:
  1. 要使用 SSL/TLS 进行连接,请首先确保按照卡夫卡文档中所述,将卡夫卡配置为使用 SSL/TLS。
  2. 在“卡夫卡”选项卡上,添加“夫卡”配置属性并将其设置为 SSL
  3. 然后添加并配置以下 SSL 卡夫卡属性:
    • 信任库位置
    • 信任库
    当 Kafka 代理需要客户端身份验证时 - 当 ssl.client.auth 代理属性设置为“必需”时 , 添加并配置以下属性:
    • 位置
    • 密码
    • .key密码
    某些代理可能还需要添加以下属性:
    • ssl.enabled.协议
    • 信任库类型
    • 密钥库类型

    有关这些属性的详细信息,请参阅 Kafka 文档。

例如,以下属性允许阶段使用 SSL/TLS 通过客户端身份验证连接到卡夫卡:

启用 Kerberos (SASL)

使用 Kerberos 身份验证时,数据收集器将使用 Kerberos 主体和密钥选项卡。

执行以下步骤,使卡夫卡多主题消费者源能够使用 Kerberos 连接到卡夫卡:
  1. 要使用 Kerberos,请首先确保按照 Kafka 文档中的说明为 Kerberos 配置了 Kafka
  2. 确保为数据收集器启用了 Kerberos 身份验证,如 Kerberos 身份验证中所述。
  3. 根据您的安装和认证类型,添加 Kafka 客户机所需的 Java 认证和授权服务 (JAAS) 配置属性:
    • 在没有 LDAP 认证的情况下安装 RPM、压缩包或 Cloudera 管理器 - 如果数据收集器不使用 LDAP 认证,请在数据收集器计算机上创建一个单独的 JAAS 配置文件。将以下登录部分添加到文件中:KafkaClient
      <span style="color:#333333"><span style="background-color:#eeeeee"><code>KafkaClient {
          com.sun.security.auth.module.Krb5LoginModule required
          useKeyTab=true
          keyTab="<keytab path>"
          principal="<principal name>/<host name>@<realm>";
      };</code></span></span>
      例如:
      <span style="color:#333333"><span style="background-color:#eeeeee"><code>KafkaClient {
          com.sun.security.auth.module.Krb5LoginModule required
          useKeyTab=true
          keyTab="/etc/security/keytabs/sdc.keytab"
          principal="sdc/sdc-01.streamsets.net@EXAMPLE.COM";
      };</code></span></span>
      然后修改SDC_JAVA_OPTS环境变量,以包括以下定义 JAAS 配置文件路径的选项:
      <span style="color:#333333"><span style="background-color:#eeeeee"><code>-Djava.security.auth.login.config=<JAAS config path></code></span></span>

      使用安装类型所需的方法修改环境变量

    • 使用 LDAP 认证的 RPM 或压缩包安装 - 如果在 RPM 或压缩包安装中启用了 LDAP 认证,请将属性添加到数据收集器使用的 JAAS 配置文件 - 该文件。将以下登录部分添加到文件末尾:$SDC_CONF/ldap-login.confKafkaClientldap-login.conf
      <span style="color:#333333"><span style="background-color:#eeeeee"><code>KafkaClient {
          com.sun.security.auth.module.Krb5LoginModule required
          useKeyTab=true
          keyTab="<keytab path>"
          principal="<principal name>/<host name>@<realm>";
      };</code></span></span>
      例如:
      <span style="color:#333333"><span style="background-color:#eeeeee"><code>KafkaClient {
          com.sun.security.auth.module.Krb5LoginModule required
          useKeyTab=true
          keyTab="/etc/security/keytabs/sdc.keytab"
          principal="sdc/sdc-01.streamsets.net@EXAMPLE.COM";
      };</code></span></span>
    • 使用 LDAP 身份验证进行云汇管理器安装 - 如果在云印管理器安装中启用了 LDAP 身份验证,请在云端管理器中为流集服务启用 LDAP 配置文件替换(ldap.login.file.allow.替换)属性。

      如果启用了“使用安全阀编辑 LDAP 信息”属性,并且“数据收集器高级配置代码段(安全阀)”字段中配置了 LDAP 认证,那么将 JAAS 配置属性添加到同一个 ldap-login.conf 安全阀中。

      如果 LDAP 认证是通过 LDAP 属性而不是 ldap-login.conf 安全值配置的,请将 JAAS 配置属性添加到数据收集器高级配置代码段(安全阀)中,以用于生成的 ldap 登录名附加.conf 字段。

      将以下登录部分添加到相应的字段中,如下所示:KafkaClient

Flink作为一个分布式流处理框架,可以集成Kafka并实现指定offset的消费。下面是使用Flink消费Kafka指定offset的简单步骤: 首先,确保你的项目依赖中已经引入了Flink和Kafka的相关库。 在Flink应用程序中,你需要创建一个消费者并指定要消费的Kafka话题。使用`FlinkKafkaConsumer`类来创建一个Kafka消费者对象,并在构造函数中指定Kafka的连接地址、话题和反序列化器等相关信息。例如: ```java Properties properties = new Properties(); properties.setProperty("bootstrap.servers", "localhost:9092"); properties.setProperty("group.id", "my-consumer-group"); FlinkKafkaConsumer<String> kafkaConsumer = new FlinkKafkaConsumer<>("my-topic", new SimpleStringSchema(), properties); ``` 然后,你可以使用`setStartFromSpecificOffsets()`方法来指定要从哪个offset开始消费。`setStartFromSpecificOffsets()`方法接受一个`Map<KafkaTopicPartition, Long>`参数,其中`KafkaTopicPartition`表示Kafka话题的分区,`Long`表示要指定的offset。例如,假设你要指定从话题`my-topic`的第一个分区的偏移量10开始消费,那么你可以这样设置: ```java Map<KafkaTopicPartition, Long> specificOffsets = new HashMap<>(); specificOffsets.put(new KafkaTopicPartition("my-topic", 0), 10L); kafkaConsumer.setStartFromSpecificOffsets(specificOffsets); ``` 最后,将Kafka消费者对象传递给Flink的`addSource()`方法来创建数据源。例如: ```java DataStream<String> dataStream = env.addSource(kafkaConsumer); ``` 在这之后,你可以继续处理和转换数据流,实现你的业务逻辑。 以上就是使用Flink Kafka消费者指定offset消费的简单过程。通过指定offset,你可以从指定位置开始消费Kafka数据,而不是从最新或最早的offset开始消费。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVASoftEngineer

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值