共计 3422 个字符,预计需要花费 9 分钟才能阅读完成。
这篇文章主要介绍“Kafka Producer 相关问题有哪些”,在日常操作中,相信很多人在 Kafka Producer 相关问题有哪些问题上存在疑惑,丸趣 TV 小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Kafka Producer 相关问题有哪些”的疑惑有所帮助!接下来,请跟着丸趣 TV 小编一起来学习吧!
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 相关问题有哪些”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注丸趣 TV 网站,丸趣 TV 小编会继续努力为大家带来更多实用的文章!