kafka 消费者-ConsumerConfig

group-id: du

enable-auto-commit: true

如果为true,则消费者的偏移量将在后台定期提交,默认值为true是否自动确认offset

auto-commit-interval: 5000

如果'enable.auto.commit'为true,则消费者偏移自动提交给Kafka的频率(以毫秒为单位),默认值为5000(自动确认offset的时间间隔)

key-deserializer: org.apache.kafka.common.serialization.StringDeserializer

value-deserializer: org.apache.kafka.common.serialization.StringDeserializer

max-poll-records: 500

一次调用poll()操作时返回的最大记录数,默认值为500

auto-offset-reset

当Kafkā中没有初始偏移量或当前偏移量在服务器中不存在(如,数据被删除了),该

如何处理?

earliest:自动重置偏移量到最早的偏移量

latest:自动重置偏移量为最新的偏移量

none:如果消费组原来的(previous)偏移量不存在,则向消费者抛异常

anything:向消费者抛异常

session.timeout.ms

当使用Kafka的消费组的时候,消费者周期性地向broker发送心跳表明自己的存在。

如果经过该超时时间还没有收到消费者的心跳,则broker将消费者从消费组移除,并启动再平衡

该值必须在broker配置

group.min.session.timeout.ms 和group.max.session.timeout.ms 之间

heartbeat.interval.ms

当使用消费组的时候,该条目指定消费者向消费者协调器 发送心跳的时间间隔。

心跳是为了确保消费者会话的活跃状态, 同时在消费者加入或离开消费组的时候方便进行再平衡。

该条目的值必须小于 session.timeout.ms ,也不应该高于 session.timeout.ms 的1/3。可以将其调整得更小,以控制正常重新平衡的预期时间。

max.poll.interval.ms

使用消费组的时候调用poll()方法的时间间隔。 该条目指定了消费者调用poll()方法的最大时间间隔。 如果在此时间内消费者没有调用poll()方法, 则broker认为消费者失败,触发再平衡, 将分区分配给消费组中其他消费者。

fetch.min.bytes

服务器对每个拉取消息的请求返回的数据量最小值。

如果数据量达不到这个值,请求等待,以让更多的数据累积,达到这个值之后响应请求

默认设置是1个字节,表示只要有一个字节的数据,就立即响应请求,或者在没有数据的时候请求超时

将该值设置为大一点儿的数字,会让服务器等待稍微长一点儿的时间以累积数据。如此则可以提高服务器的吞吐量,代价是额外的延迟时间。

fetch.max.wait.ms

如果服务器端的数据量达不到 fetch.min.bytes 的话,服务器端不能立即响应请求

该时间用于配置服务器端阻塞请求的最大时长。

fetch.max.bytes

务器给单个拉取请求返回的最大数据量。 消费者批量拉取消息,如果第一个非空消息批次的值比该值大, 消息批也会返回,以让消费者可以接着进行。 即该配置并不是绝对的最大值。 broker可以接收的消息批最大值通过 message.max.bytes (broker配置) 或 max.message.bytes (主题配置)来指定。 需要注意的是,消费者一般会并发拉取请求。

connections.max.idle.ms

在这个时间之后关闭空闲的连接。

check.crcs

自动计算被消费的消息的CRC32校验值。可以确保在传输过程中或磁盘存储过程中消息没有被破坏。它会增加额外的负载,在追求极致性能的场合禁用。

exclude.internal.topics

是否内部主题应该暴露给消费者。如果该条目设置为true,则只能先订阅再拉取。

isolation.level

控制如何读取事务消息。 如果设置了 read_committed ,消费者的poll()方法只会 返回已经提交的事务消息。 如果设置了 read_uncommitted (默认值), 消费者的poll方法返回所有的消息,即使是已经取消的事务消息。 非事务消息以上两种情况都返回。 消息总是以偏移量的顺序返回。 read_committed 只能返回到达LSO的消息。 在LSO之后出现的消息只能等待相关的事务提交之后才能看到。 结果, read_committed 模式,如果有为提交的事务, 消费者不能读取到直到HW的消息。 read_committed 的seekToEnd方法返回LSO

max.partition.fetch.bytes

  1. 对每个分区,服务器返回的最大数量。消费者按批次拉取数据
  2. 如果非空分区的第一个记录大于这个值,批处理依然可以返回,以保证消费者可以进行下去
  3. broker接收批的大小由 message.max.bytes (broker参数)
  4. max.message.bytes (主题参数)指定。

send.buffer.bytes

用于TCP发送数据时使用的缓冲大小(SO_SNDBUF),

-1表示使用OS默认的缓冲区大小。

retry.backoff.ms

在发生失败的时候如果需要重试,则该配置表示客户端

等待多长时间再发起重试。

该时间的存在避免了密集循环。

request.timeout.ms

客户端等待服务端响应的最大时间。如果该时间超时,则客户端要么重新发起请求,要么如果重试耗尽,请求失败

reconnect.backoff.ms

重新连接主机的等待时间。避免了重连的密集循环。

该等待时间应用于该客户端到broker的所有连接。

reconnect.backoff.max.ms

重新连接到反复连接失败的broker时要等待的最长时间 以毫秒为单位

如果提供此选项,则对于每个连续的连接失败,

每台主机的退避将成倍增加,直至达到此最大值。

在计算退避增量之后,添加20%的随机抖动以避免连接风暴。

receive.buffer.bytes

TCP连接接收数据的缓存(SO_RCVBUF)。

-1表示使用操作系统的默认值。

partition.assignment.strategy :当使用消费组的时候,分区分配策略的类名。

metrics.sample.window.ms :计算指标样本的时间窗口。

metrics.recording.level :指标的最高记录级别。

metrics.num.samples: 用于计算指标而维护的样本数量

interceptor.classes

拦截器类的列表。默认没有拦截器:

org.apache.kafka.clients.consumer.ConsumerInterceptor

拦截器可用于对消费者接收到的消息进行拦截处理。

Kafka提供了一个Java客户端库`kafka-clients`,其中包含用于创建和管理消费者的类和方法。下面是一个示例,展示如何使用`kafka-clients`中的消费者类来消费Kafka消息: ```java import org.apache.kafka.clients.consumer.ConsumerConfig; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import org.apache.kafka.common.TopicPartition; import java.time.Duration; import java.util.Collections; import java.util.Properties; public class KafkaConsumerExample { public static void main(String[] args) { String bootstrapServers = "localhost:9092"; String groupId = "my-consumer-group"; String topic = "my-topic"; // 配置消费者属性 Properties properties = new Properties(); properties.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, bootstrapServers); properties.put(ConsumerConfig.GROUP_ID_CONFIG, groupId); properties.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); properties.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, "org.apache.kafka.common.serialization.StringDeserializer"); // 创建消费者实例 KafkaConsumer<String, String> consumer = new KafkaConsumer<>(properties); // 订阅主题 consumer.subscribe(Collections.singletonList(topic)); // 或者指定特定的分区进行订阅 // TopicPartition partition = new TopicPartition(topic, 0); // consumer.assign(Collections.singleton(partition)); // 开始消费消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(1000)); for (ConsumerRecord<String, String> record : records) { // 处理消息 System.out.println("Received message: " + record.value()); } } } } ``` 在上述示例中,首先配置了消费者的属性,包括Kafka集群地址、消费者组ID以及消息的反序列化器。然后创建了一个`KafkaConsumer`对象,并使用`subscribe`方法订阅了一个主题(或者可以使用`assign`方法指定特定的分区进行订阅)。 最后,在一个无限循环中调用`poll`方法来获取消息记录,然后遍历处理每条消息。 需要注意的是,消费者需要定期调用`poll`方法以获取新的消息记录。另外,消费者还可以使用`commitSync`或`commitAsync`方法手动提交消费位移,以确保消息被成功处理。 希望以上示例对你理解如何使用`kafka-clients`库中的消费者类来消费Kafka消息有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值