千家信息网

Kafka Producer相关问题有哪些

发表于:2024-11-21 作者:千家信息网编辑
千家信息网最后更新 2024年11月21日,这篇文章主要介绍"Kafka Producer相关问题有哪些",在日常操作中,相信很多人在Kafka Producer相关问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
千家信息网最后更新 2024年11月21日Kafka Producer相关问题有哪些

这篇文章主要介绍"Kafka Producer相关问题有哪些",在日常操作中,相信很多人在Kafka Producer相关问题有哪些问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"Kafka Producer相关问题有哪些"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

Producer 相关

1:我该怎么设置:metadata.broker.list?

Producre会通过metadata.broker.list来取得自己所想要的Metadata,一旦成功取得metada,生产

者就会直接发射 Produce的request到这个持有了相对topic/partition的Broker上。在Zookeeper上用

ip/port 去注册这个Broker,任意的一个Broker能够Serve这个metadata的请求,Client必须确保

在 metadata.broker.list 之中存在有至少一个Broker是能够提供服务的,在一个load balancer之中有一种方

式去achieve 这些,那就是通过VIP(目前不知道什么是VIP)

2:为什么Producer在async模式运行的过程之中会得到 QueueFullException?

这一个现象很典型的发生在Producer发射消息的速度要远远超过Broker能够处理的速度,如果

你的日志能够不允许被Block,那么唯一的方式就是,不得不添加新的足够的Broker,使他们和之前的

Broker协同处理,如果您的日志数据是能够被允许Block的,那么您可以通过设置如下:

queue.enqueueTimeout.ms:-1 ,

通过这种方式,一旦我们的队列满了,生产者将会Block 这些数据,而不是直接丢弃。

‍ 3:当我使用的 Zk_based的Producer 在0.7版,我只是看到数据在一些Broker上消费,而不是全部?‍

这个问题主要和kafka0.7 系列相关: http://apache.markmail.org/thread/c7tdalfketpusqkg

简单点来说,对于一个新的Topic而言,Producer将会使用所有存在的Brokers,然而,如果Topic在其他的Brokers之上已经存在,而这个时候你又新添加了新的Broker,这个时候,这些Producer将不会看到这些新添加的Producer。一个替代的方案是去手动的为这些Topic,在新添加的Broker上创建log目录。

4:为什么更改压缩级别以后,我们的Brokers并没有接收到来自于 Producer生产的数据?

这个现象发生在当我 通过设置compression.codec 为1,试图开启Gzip 压缩的时候,伴随着Codec的改变,你可能会发现,即便的数据发射已经一秒钟以后,这一条数据你依旧没有收到,任何地方都没有出现日志记录错误,后来通过增加了 log4j.properties到我的Producer的classPath 并且将日志的记录级别设置为DEBUG模式,我发现了在Producer端出现了: org/xerial/snappy/SnappyInputStream NotClass 错误,通过添加了Snappy jar以后错误消失了

5:我们是否能够删除掉 kafka之中的一个Topic?

到目前为止 kafka Version0.8还不能直接的删除,如果你要删除topic,您需要在删除kafka之中存放的一系列的数据,并且将保持在Zookeeper上的状态和数据一并删除

Consumers 相关

1: 为什么我们的消费者从来都拿不到数据?

在默认的情况之下,消费者如果是【历史第一次开始消费】,那么他它将忽略整个Topic之中,所有的现有的数据,他将只是消费目前Consumer启动以后,最新到来的数据。因此,请尝试在启动之后多发射一些数据,或者您可以通过设定: auto.offset.reset to "smallest".

2: 为什么消费者取数的时候得到:invalidMessageSizeException?

通常的情况住下,这意味着 消费者的"Fetch.Size"的大小还不够,每一次消费者从Broker提取数据的

过程之中,都会读取一个已经配置好的上限的数据,如果这个大小,比我们kafka单条日志的大小【最大】还要

小,就会抛出invalidMessageSizeException,要解决这个问题,需要通过设置属性:

fetch.message.max.bytes

fetch.size

默认的Fetch.Size的尺寸是300,000

3: 我是否需为当前的消费者选择多个group ID,或则只是一个?

如果所有的消费者都使用相同的组 id,在主题中的信息就被分发到这些消费者。换句话说,每个消费者

将得到消息的非重叠子集。同一组中拥有更多的消费者增加了并行度和消费的总体吞吐量。另一方面,如果每个

消费者拥有其自己的组ID,那么每个消费者将得到所有消息的完整的副本。

4:为什么在一个消费者组中间的一些消费者一直都没有拿到数据?

在当前的角度之上,相对于一个ConusmerGroup中的Consumer而言,一个Topic的分区【partition】

就是最小的单元,于是,如果你一个Consumer组中间的Consumer数量大于Partition的数目,那就会有一些

Consumer空闲得不到数据了。要解决这个问题,可以通过增加你的Partitions的数目。

5:为什么有很多 reblance 在我门的消费者log之中?

【过多平衡调整】的一个典型原因是消费者侧 GC。如果是这样,您将看到Zookeeper会话失效在消费者日志 (过期 grep)。偶然几次的Rebalnce是有必要的,但是一旦次数过多,那么将降低我们消费Consumer的次数,这个时候 Java GC 需要我们去调整

6:我们可以预测kafka consumer rebalance 的结果么?

7:我自己的Conusmer 看起来已经停止了,这是为什么?

8:为什么我的数据 在消费的过程之中出现延迟了。

9:如何去提高kafka remote Consumer的吞吐量?

10:如何在消费的过程之中重置这个偏移量

11:如果我不想目前kafka自身去管理消费的偏移量,我想自身去管理,那该怎么办?

12:Fetch.wait.max.ms 和 Socket.timeout.ms 的关系是怎样的?

13: 用怎么样的方式才能从kafka 拿到一条 精确的消息?

14:怎么通过OffsetFetchRequest,用TimeStamp去精确得到指定的消息的偏移量

Brokes相关

1:kafka 是如何依赖Zookeeper的?

2:为什么控制关闭失败了?

3:为什么我的 Consumer/Producer 连接不上Broker

4:为什么我们的 Partiton Leaders 会迁移他们自己?

5:我们能够拥有多少个topic?

6:对于一个Topic而言,我们应该如何去选择分区的数?

7: Why do I see lots of Leader not local exceptions on the broker during controlled shutdown?

-------- 中文不太好翻译 --------

8:如何在ISR 阶段减少 Churns ? 什么时候一个Broker会离开ISR阶段?

9:每当Bouncing 一个Borker,为什么在启动的时候我们会遭遇到:LeaderNotAvaible or NotLeaderFor Excetpion ?

10:我们是否能够动态的向集群添加一个新的 Broker?

到此,关于"Kafka Producer相关问题有哪些"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

0