Kafka 消费者

本文详细介绍了Kafka消费者的配置,包括使用者组、Kafka属性、记录标头属性以及如何启用SSL/TLS和Kerberos进行安全连接。讨论了自动偏移重置、Avro数据处理和卡夫卡安全协议的实现,为Kafka使用者的安全连接和高效操作提供了全面指导。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

卡夫卡消费者

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

卡夫卡消费者源从阿帕奇卡集群中的单个主题读取数据。要使用多个线程从多个主题中读取,请使用 Kafka 多主题使用者

配置 Kafka 使用者时,可以配置使用者组名称、主题和 ZooKeeper 连接信息。

您可以将 Kafka 使用者配置为使用融合架构注册表。融合模式注册表是 Avro 模式的分布式存储层,它使用 Kafka 作为其底层存储机制。

您可以根据需要添加其他 Kafka 配置属性。您还可以将源配置为使用 Kafka 安全功能。

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

胶印管理

使用者组标识的 Kafka 使用者源首次收到来自主题的消息时,将为该使用者组和主题创建偏移条目。偏移条目是在动物园守护者或卡夫卡中创建的,具体取决于您的卡夫卡版本和代理配置。

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

无存储偏移

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

以前存储的偏移量

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

其他卡夫卡属性

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

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

注意:卡夫卡使用者源使用以下卡夫卡配置属性。源忽略以下属性的用户定义值:
  • 自动提交启用
  • group.id
  • 动物园管理员.连接

记录标头属性

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

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

Kafka 使用者源创建以下记录标头属性:
  • avroSchema - 在处理 Avro 数据时,提供 Avro schema.
  • 卡夫卡时间戳 - 来自卡夫卡消息标头的时间戳。如果启用了“包括时间戳”属性,则创建。
  • 卡夫卡时间戳类型 - 来自卡夫卡消息标头的时间戳类型。如果启用了“包括时间戳”属性,则创建。
  • 偏移量 - 记录源自的偏移量。
  • 分区 - 记录源自的分区。
  • 主题 - 记录源自的主题。

启用安全性

您可以将卡夫卡消费者源配置为通过 SSL/TLS 和/或 Kerberos 进行安全连接。

启用 SSL/红绿灯系统

执行以下步骤,使卡夫卡消费者源能够使用 SSL/TLS 连接到卡夫卡。您可以使用相同的步骤来配置 Kafka 创建器。

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

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

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

启用 Kerberos (SASL)

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

执行以下步骤,使卡夫卡消费者源能够使用 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

      <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@<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="_KEYTAB_PATH"
          principal="sdc/_HOST@EXAMPLE.COM";
      };</code></span></span>

      Cloudera 管理器会生成相应的密钥表路径和主机名。

  4. 在舞台的“常规”选项卡上,将“舞台库”属性设置为相应的“卡夫卡”版本。
  5. 在“卡夫卡”选项卡上,添加“安全协议”配置属性,并将其设置为SASL_PLAINTEXT
  6. 然后,添加 sasl.kerberos.service.name 配置属
### Java Kafka 消费者的使用教程 在 Java 开发环境中,Kafka 提供了一个强大的消费者客户端 `KafkaConsumer` 来订阅和消费来自 Kafka 主题的消息。以下是关于如何配置、初始化以及操作 Kafka 消费者的核心知识点。 #### 1. 创建 Kafka 消费者实例 创建一个 Kafka 消费者对象需要指定一些必要的参数,比如 broker 地址列表 (`bootstrap.servers`) 和消费者组 ID (`group.id`)。这些可以通过传递属性给 `Properties` 对象完成: ```java import org.apache.kafka.clients.consumer.KafkaConsumer; import java.util.Properties; public class KafkaExample { public static Properties createConsumerConfig(String brokers, String groupId) { Properties props = new Properties(); props.put("bootstrap.servers", brokers); // 设置Kafka Broker地址 props.put("group.id", groupId); // 设置消费者组ID props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "org.apache.kafka.commonserialization.StringDeserializer"); return props; // 返回配置好的Properties对象 } } ``` 上述代码片段展示了如何构建用于初始化消费者的配置项[^2]。 #### 2. 订阅主题并拉取消息 一旦有了 `KafkaConsumer` 实例,就可以调用其方法来订阅特定的主题,并通过轮询机制获取数据流中的记录集合。 ```java import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; // 初始化消费者... KafkaConsumer<String, String> consumer = new KafkaConsumer<>(createConsumerConfig(...)); consumer.subscribe(Arrays.asList("your-topic-name")); while (true) { // 循环不断读取新消息 ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100)); for (var record : records) // 处理每条接收到的数据 System.out.printf("Offset = %d, Key = %s, Value = %s%n", record.offset(), record.key(), record.value()); } ``` 此部分说明了如何让程序持续监听某个主题的新事件到达情况[^1]。 #### 3. 关于位移管理和重置策略的重要性 为了保证系统的可靠性,在实际部署过程中还需要特别关注到消费者的位置跟踪即所谓的“offset”。如果遇到异常中断等情况,则可能需要重新调整当前已处理过的 offset 数值以便恢复状态或者跳过有问题的部分继续前进。这一步骤对于维护整个管道的一致性和稳定性至关重要[^3]。 #### 4. 版本兼容注意事项 当设置生产环境下的服务架构时,请务必确认所使用的 Apache Kafka 及 Zookeeper 的具体发行版号满足官方文档推荐的最佳搭配组合表单中给出的要求;否则极有可能引发意想不到的技术难题甚至崩溃现象发生。例如,在较新的 Kafka 版本里虽然允许内部管理 offsets 而不必依赖外部组件 zookeeper ,但仍需维持两者间适当程度上的同步更新频率以规避潜在风险因素存在[^4]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

JAVASoftEngineer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值