Kafka way to explore https:https://cdn.v2ex.com/navatar/d79a/ac07/980_normal.png?m=1585387011 https:https://cdn.v2ex.com/navatar/d79a/ac07/980_large.png?m=1585387011 2024-11-12T12:02:55Z Copyright © 2010-2018, V2EX 请问一下,多节点消费 kafka 如何做到串行消费 tag:www.v2ex.com,2024-08-27:/t/1068284 2024-08-27T14:46:30Z 2024-11-12T12:02:55Z NoKey member/NoKey 为了保证任务下发后不丢失
打算借助 kafka 的持久化,把任务丢到 kafka 中
后台服务有多个节点,也就是多个节点在消费 kafka
怎么样才能做到串行消费 kafka 的消息呢?
就是说,多个节点排队消费,第一个节点拿到消息后,如果没处理完,其他节点不能继续消费
搞了好久都没实现
又不想用数据库存储然后定时读取的方式(这种方式肯定没问题)
想通过这个功能,学会 kakfa 的使用
请假一下各位大佬,基于 kafka 能不能实现这个想法呢?谢谢 ]]>
Kafka 消息处理冲突问题 tag:www.v2ex.com,2024-06-25:/t/1052585 2024-06-25T13:55:46Z 2024-06-25T14:05:49Z lucashuang0722 member/lucashuang0722 背景

我目前有一个 Kafka 集群,包含两个 Kafka 服务器,它们共享同一个 Zookeeper 。集群中有两个主题:corpnet-requests 和 corpnet-responses ,这两个主题都有 3 个 partition 。

系统中有四个客户端:

Client AClient B:订阅两个 Kafka 服务器上的 corpnet-requests 和 corpnet-responses 主题。这两个客户端负责生产包含 guid 、url 、payload 和 auth 的消息到 corpnet-requests 主题。

Client CClient D:同样订阅两个 Kafka 服务器上的 corpnet-requests 和 corpnet-responses 主题。这两个客户端负责消费 corpnet-requests 主题中的消息,执行实际的 HTTP 请求,并将响应结果生产到 corpnet-responses 主题中。

Client AClient B:除了生产请求消息外,还需要消费 corpnet-responses 主题中的消息,以获取实际的 HTTP 响应,完成一次请求的逻辑。

以上设计主要用于解决 Client A 和 B 无法访问公司内网资源的问题,公司内网无法通过 vpn 访问。

问题描述

由于 corpnet-requests 和 corpnet-responses 主题都有多个分区,我担心会出现以下冲突情况:

Client A生产的请求消息的响应(由Client CClient D生成)可能会被Client B消费,反之亦然。

我的疑问

请教各位大佬如何确保每个请求的响应能够准确地返回给发起请求的客户端(即Client A的请求响应不会被Client B消费,反之亦然)。似乎通过 key 来限制 partition 或者规划消费者组都无法保证,当然也有可能是我学艺不精理解有误。。

欢迎大家提供解决方案或建议,谢谢!

]]>
kafka king 陆续也快有 100 个 star 了,虽然很少,但是也是对我的认可,感谢大家 tag:www.v2ex.com,2024-04-14:/t/1032349 2024-04-14T06:50:36Z 2024-04-14T06:47:36Z bronyakaka member/bronyakaka kafka king 是一个用 Python 开发的 GUI 工具,用于操作、监控 kafka 集群,例如 topic 操作、分区编辑、模拟生产者消费者、offset 积压监控等等功能。

陆续也快有 100 个 star 了,虽然很少,但是也是对我的认可,感谢大家

重要版本 v0.20🎉

使用了全新的 icon ,代表更新的活力。

修复最小化后有时会无法放大的 bug

增加 [监控] 功能,配置好 topic 和组后,以图表显示积压信息,后续将会增加告警模块

更新记录

1 、重要:修复最小化后有时会无法放大的 bug

2 、重要:增加 [监控] 功能,配置好 topic 和组后,以图表显示积压信息,后续将会增加告警模块

3 、add: 将分区数改为按钮,取消主题按钮

4 、add: 去除下拉默认背景颜色

5 、add: 增加默认值

6 、fix:重要,修复最小化无法恢复的问题

7 、add: 基本完成监控系统

8 、fix: 修复 group 问题

9 、add:增加监控图表配置及存储

10 、add: 优化不同提示的区别

11 、更新 icon

github 下载地址: https://github.com/Bronya0/Kafka-King

]]> 求助一个 zookeeper 配置 acl, kafka 是否需要做相关修改的问题 tag:www.v2ex.com,2024-04-02:/t/1029098 2024-04-02T05:11:57Z 2024-04-02T02:11:57Z OneXT member/OneXT 我登陆到 zookeeper 后通过下方命令新增一个账号密码

addauth digest admin:123456 setAcl / auth:admin:cdrwa 

通过下方测试看到 zookeeper 的账号密码应是生效了

[root@local-test bin]# ./zookeeper-shell.sh localhost:2181 Connecting to localhost:2181 Welcome to ZooKeeper! JLine support is disabled WATCHER:: WatchedEvent state:SyncConnected type:None path:null ls / Insufficient permission : / addauth digest admin:123456 ls / [admin, brokers, cluster, config, consumers, controller, controller_epoch, feature, isr_change_notification, latest_producer_id_block, log_dir_event_notification, zookeeper] 

可我未对 kafka 做任何修改,为什么 kafka 创建 topic 、生产、消费依旧正常?

理论上 zookeeper 作为服务端添加了认证,kafka 作为客户端也需要修改一些配置吗。很是奇怪。

PS:我用的是 kafka v3.6.0 版本,zookeeper 使用的是 kafka 安装包中内置的。

]]>
2023 年基于 Kafka 做重试队列的最佳实践? tag:www.v2ex.com,2023-12-07:/t/998363 2023-12-07T06:36:59Z 2023-12-07T06:33:59Z Masoud2023 member/Masoud2023 我想到的几种方法:

  1. 执行失败了就原封不动发回原队列,但是这样在有大量失败的情况下或许会造成单队列压力特别大
  2. 创建一个专门的重试队列,任务失败了就发到这个重试队列,然后再写一个服务,把重试队列的数据定时吐到主队列,缺点是多了一个服务,不太好维护
  3. 写进 mysql 然后手动读,感觉 mysql 扛不住
  4. 用个屁的 kafka ,天天吹性能,但是性能高又怎么样,就是一根高性能水管子,DLQ 重试队列一个没有,还不如换 RabbitMQ 或者 RocketMQ 。喷归喷,但是之后调研发现 rabbit 性能感觉确实一般,RocketMQ 的话感觉脱离阿里云,自己手动搭很容易出问题。

还有没有其他实践可以分享?

]]>
kakfa 生产者的 ack=all 的参数会受到 broker 的最小同步副本参数的影响吗 tag:www.v2ex.com,2023-12-05:/t/997806 2023-12-05T08:10:01Z 2023-12-15T02:54:23Z nizikooo member/nizikooo kafka 的 producer 和 broker 的关系是什么? tag:www.v2ex.com,2023-11-27:/t/995535 2023-11-27T04:13:16Z 2023-11-27T05:13:16Z chaleaochexist member/chaleaochexist 9t4vbt.png 参考图片. producer 是和 broker 在一台物理设备上? 还是说只是一个 library, 被应用层代码调用, 然后负责和 broker 通信?

有此疑问是因为:

  1. kafka server 上有配置文件可以配置 producer (producer.properties)
  2. 根据链接 https://www.baeldung.com/java-kafka-send-large-message 似乎也可以在代码里配置 producer

还是说代码端和配置端都可以修改, 一个是动态的一个是静态的?

快问快答 不要太咬文嚼字 轻喷轻喷.

]]>
kafka 性能问题: kafka 传递海量小数据的时候,需要合并数据发送吗 tag:www.v2ex.com,2023-11-21:/t/993723 2023-11-21T02:12:29Z 2023-12-02T17:00:11Z sniperking1234 member/sniperking1234 对 kafka 不了解,求助下 v 友。

场景是有很多小数据需要通过 kafka 发送,每条数据的量不到 1kb ,但是高峰期数量很多,这种情况下,小数据会不会影响 kafka 性能,需要把数据合并成数组,批量发送吗。kafka 在哪种情况下性能会好一些呢。

]]>
有无 kafka 八股文或者书籍推荐 tag:www.v2ex.com,2023-11-15:/t/992075 2023-11-15T04:23:13Z 2023-11-15T04:24:30Z q11391 member/q11391 有什么好用的 kafka 桌面客户端? tag:www.v2ex.com,2023-11-02:/t/987810 2023-11-02T03:59:40Z 2024-01-23T14:42:35Z JeffyChen member/JeffyChen 支持 windows 或 mac

]]>
kafka Kraft 模式增加投票节点配置后启动报错 tag:www.v2ex.com,2023-11-02:/t/987780 2023-11-02T03:11:19Z 2023-11-01T23:11:19Z zenv member/zenv kafka 报

Configured voter set: [1, 2] is different from the voter set read from the state file: [1]. Check if the quorum configuration is up to date, or wipe out the local state file if necessary 

我是在 kafka/config/server.properties 新增加了一个 vote ,如下:

增加前:

controller.quorum.voters=1@10.20.74.57:9093 

增加后:

controller.quorum.voters=1@10.20.74.57:9093,2@10.20.74.58:9093 

然后再启动的时候就报错了,我该如何解决?

]]>
kafka-console-consumer.sh 同时读取某个 topic 的所有 partition 能实现吗? tag:www.v2ex.com,2023-09-29:/t/978106 2023-09-29T02:13:57Z 2023-10-17T06:47:50Z chaleaochexist member/chaleaochexist ./kafka-console-consumer.sh --offset latest --bootstrap-server 10.54.7.143:9092 --topic ***

这样报错, 因为 --offset latest 和 partition 必须同时指定. 要么都不指定.

]]>
请教一个使用 HAProxy 代理访问 kafka 集群的问题 tag:www.v2ex.com,2023-04-21:/t/934424 2023-04-21T11:52:25Z 2023-04-22T06:22:04Z 967182 member/967182 kafka 集群有三台机器 kafka01:9092 kafka03:9092 kafka03:9092

因为受网络原因约束不能直接访问集群,只能在服务器 192.168.30.160 上搭代理 试了两种配置方式

 方式一: listen kafka bind *:9092 mode tcp balance roundrobin no option clitcpka timeout check 5s server kafka01 192.168.41.168:9092 check inter 5000 rise 2 fall 3 server kafka02 192.168.41.169:9092 check inter 5000 rise 2 fall 3 server kafka03 192.168.41.170:9092 check inter 5000 rise 2 fall 3 
 方式二: listen kafka bind *:9092 mode tcp balance roundrobin server kafka1 127.0.0.1:8881 check server kafka2 127.0.0.1:8883 check server kafka3 127.0.0.1:8885 check listen kafka01 bind *:8881 mode tcp server kafka1 192.168.41.168:9092 check listen kafka02 bind *:8883 mode tcp server kafka1 192.168.41.169:9092 check listen kafka03 bind *:8885 mode tcp server kafka1 192.168.41.170:9092 check 
 kafka client 试过这两个配置,kafka01,kafka02,kafka03 都指向了 192.168.30.160 public final static String bootstrapServers = "kafka01:9092,kafka02:9092,kafka03:9092"; public final static String bootstrapServers = "kafka01:9092"; 网络测试 telnet 通, 代理和 host ping 也都通。 

发送消息时报错 :

 19:37:39.347 [main] INFO org.apache.kafka.clients.producer.ProducerConfig - ProducerConfig values: acks = -1 batch.size = 16384 bootstrap.servers = [kafka01:9092] buffer.memory = 33554432 client.dns.lookup = default client.id = compression.type = gzip connections.max.idle.ms = 3000 delivery.timeout.ms = 120000 enable.idempotence = false interceptor.classes = [] key.serializer = class org.apache.kafka.common.serialization.StringSerializer linger.ms = 500 max.block.ms = 60000 max.in.flight.requests.per.cOnnection= 5 max.request.size = 1048576 metadata.max.age.ms = 300000 metric.reporters = [] metrics.num.samples = 2 metrics.recording.level = INFO metrics.sample.window.ms = 30000 partitioner.class = class org.apache.kafka.clients.producer.internals.DefaultPartitioner receive.buffer.bytes = 32768 reconnect.backoff.max.ms = 1000 reconnect.backoff.ms = 50 request.timeout.ms = 10000 retries = 0 retry.backoff.ms = 100 sasl.client.callback.handler.class = null sasl.jaas.cOnfig= null sasl.kerberos.kinit.cmd = /usr/bin/kinit sasl.kerberos.min.time.before.relogin = 60000 sasl.kerberos.service.name = null sasl.kerberos.ticket.renew.jitter = 0.05 sasl.kerberos.ticket.renew.window.factor = 0.8 sasl.login.callback.handler.class = null sasl.login.class = null sasl.login.refresh.buffer.secOnds= 300 sasl.login.refresh.min.period.secOnds= 60 sasl.login.refresh.window.factor = 0.8 sasl.login.refresh.window.jitter = 0.05 sasl.mechanism = GSSAPI security.protocol = PLAINTEXT security.providers = null send.buffer.bytes = 131072 ssl.cipher.suites = null ssl.enabled.protocols = [TLSv1.2, TLSv1.1, TLSv1] ssl.endpoint.identification.algorithm = https ssl.key.password = null ssl.keymanager.algorithm = SunX509 ssl.keystore.location = null ssl.keystore.password = null ssl.keystore.type = JKS ssl.protocol = TLS ssl.provider = null ssl.secure.random.implementation = null ssl.trustmanager.algorithm = PKIX ssl.truststore.location = null ssl.truststore.password = null ssl.truststore.type = JKS transaction.timeout.ms = 60000 transactional.id = null value.serializer = class org.apache.kafka.common.serialization.StringSerializer 19:37:42.274 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.producer.internals.Sender - [Producer clientId=producer-1] Starting Kafka producer I/O thread. 19:37:42.280 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Initialize connection to node kafka01:9092 (id: -1 rack: null) for sending metadata request 19:37:42.283 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Initiating connection to node kafka01:9092 (id: -1 rack: null) using address kafka01/192.168.30.160 19:37:42.287 [main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka version: 2.4.1 19:37:42.287 [main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka commitId: c57222ae8cd7866b 19:37:42.288 [main] INFO org.apache.kafka.common.utils.AppInfoParser - Kafka startTimeMs: 1682077062274 19:37:42.296 [main] DEBUG org.apache.kafka.clients.producer.KafkaProducer - [Producer clientId=producer-1] Kafka producer started 19:37:45.442 [main] INFO com.example.demokafka.test.TestProduct - 准备发送 19:38:00.121 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.network.Selector - [Producer clientId=producer-1] Created socket with SO_RCVBUF = 32768, SO_SNDBUF = 131072, SO_TIMEOUT = 0 to node -1 19:38:00.432 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Completed connection to node -1. Fetching API versions. 19:38:00.432 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Initiating API versions fetch from node -1. 19:38:00.577 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.common.network.Selector - [Producer clientId=producer-1] Connection with kafka01/192.168.30.160 disconnected java.io.EOFException: null at org.apache.kafka.common.network.NetworkReceive.readFrom(NetworkReceive.java:96) at org.apache.kafka.common.network.KafkaChannel.receive(KafkaChannel.java:424) at org.apache.kafka.common.network.KafkaChannel.read(KafkaChannel.java:385) at org.apache.kafka.common.network.Selector.attemptRead(Selector.java:651) at org.apache.kafka.common.network.Selector.pollSelectionKeys(Selector.java:572) at org.apache.kafka.common.network.Selector.poll(Selector.java:483) at org.apache.kafka.clients.NetworkClient.poll(NetworkClient.java:547) at org.apache.kafka.clients.producer.internals.Sender.runOnce(Sender.java:335) at org.apache.kafka.clients.producer.internals.Sender.run(Sender.java:244) at java.base/java.lang.Thread.run(Thread.java:834) 19:38:00.579 [kafka-producer-network-thread | producer-1] DEBUG org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Node -1 disconnected. 19:38:00.583 [kafka-producer-network-thread | producer-1] WARN org.apache.kafka.clients.NetworkClient - [Producer clientId=producer-1] Bootstrap broker kafka01:9092 (id: -1 rack: null) disconnected 

实在想不通是啥问题了,望大佬能赐教。

]]>
kafka stream 拓扑的几个疑问 tag:www.v2ex.com,2023-03-24:/t/926979 2023-03-24T14:02:49Z 2023-03-24T14:01:49Z tenserG member/tenserG 最近在学习 kafka-stream,也在看 Kafka Streams 实战,有几个关于拓扑的疑问

拓扑中产生了 change-log 结尾的分区,查了很多资料是说和状态存储有关系,这个 topic 对集群流量会有什么影响,如果没有会怎么样

我的理解是 change-log 只会保存最后一次状态,重启 stream 时候本地会从 change-log 恢复状态,不过这样就很难估算 kafka 集群流量了

最后吐槽下 kafka stream 相关书籍实在太少,外网资料也是,可能从 spark 学起更好?

]]>
在生产环境中,向 kafka 发送图片消息是否合适 tag:www.v2ex.com,2023-03-14:/t/923813 2023-03-14T02:41:26Z 2023-03-14T04:06:06Z OblivionStaff member/OblivionStaff 生产环境中,有许多 1080p 的 jepg 图片要消费分析,这些图片大多数被分析后就不需要再保留了。 一种保险的方案是:把图片先上传到 S3 这种云存储服务,再将 url 发送到 kafka ,然后 consumers 拉取消息并下载图片分析,但其中 s3 的成本很高。 另一种方案是:把图片的 raw data 发送到 kafka 中,consumers 拉取并分析。但不清楚在生产环境中这样做会不会有很大的隐患。请问有成功的实践案例吗?

]]>
kafka 消费者平滑退出一般是怎么做的? tag:www.v2ex.com,2022-10-17:/t/887568 2022-10-17T09:21:18Z 2022-10-16T17:20:18Z daoqiongsi1101 member/daoqiongsi1101 比如 poll 了 1000 条内容,已经消费了 500 个,此时要中断消费,那么剩余的 500 个岂不是丢了,如何保证消费完再退出?监听信号量吗?

]]>
请教 kafka 独立消费者 如果崩溃了如何获取 offset? tag:www.v2ex.com,2022-09-09:/t/878860 2022-09-09T03:34:06Z 2022-09-09T06:35:00Z chaleaochexist member/chaleaochexist 最简单的例子. 一个独立消费者(不隶属于任何群组) 重启. 并且消费者代码中没有设置 offset.

我想默认从上一次消费的地点继续消费. 有没有办法实现?

kafka 是如何认识这个独立的消费者? 群组我知道, 是由 group name 来标识. 但是独立消费者我没想明白有什么办法. kafka 权威指南中也没有找到相关的描述.

似乎 kafka 消费者使用群组是一个很普遍的做法.

kafka 新手. 轻喷.

]]>
关于 kafka 丢数据 tag:www.v2ex.com,2022-09-06:/t/878185 2022-09-06T13:24:35Z 2022-09-18T12:54:55Z badboy17 member/badboy17 为什么 kafka 会在生产消息时可能丢数据,kafka 不是基于 tcp 协议的吗,又为什么消费者拉数据则不会丢数据呢,知乎同问,求大佬解答 https://www.zhihu.com/question/502982361

]]>
如何获取 KRaft Kafka 的 controller leader tag:www.v2ex.com,2022-08-22:/t/874583 2022-08-22T07:39:49Z 2022-08-22T07:38:49Z vczyh member/vczyh 现在知道可以通过提供的脚本获取:

# ./kafka-metadata-shell.sh --snapshot /tmp/kraft-combined-logs/__cluster_metadata-0/00000000000000000000.log Loading... Starting... [ Kafka Metadata Shell ] >> cat metadataQuorum/leader LeaderAndEpoch(leaderId=OptionalInt[1], epoch=8) 

想通过 API 获取,不知道可不可行?

]]>
如何从 Kafka 消费的数据中取最大值存储? tag:www.v2ex.com,2022-08-11:/t/872301 2022-08-11T14:19:42Z 2022-08-11T14:19:42Z chi1st member/chi1st 从 Kafka 每分钟接收数千条消息,每条消息中有 1000 条记录信息,记录 record 内容为(ip, time ,value)

相同 ip ,time 的 record 会有多个不同值,且有可能是不同分区,不同消息中传过来的,消费到的时间也可能相隔的比较长

如何快速找到同一 ip ,同一时间的最大 value ?

]]>
Kafka Stream 拓扑结构可视化 tag:www.v2ex.com,2022-07-10:/t/865230 2022-07-10T03:53:33Z 2022-07-09T19:53:33Z likeunix member/likeunix 在编写流式应用程序时,除了使用 topology.describe()方法打印拓扑描述时,还可以使用 Kafka Assistant 生成拓扑图,这对于观察 Stream 程序来说非常方便。

官网地址: http://www.redisant.cn/ka/

打开 Kafka Assistant ,切换到 Stream 选项卡,点击新建,在 Host 、Port 输入框中输入 Stream 程序所在的主机地址和 JMX 端口。

然后,左侧会出现新建的 Stream 程序,右侧可以看到每个 Stream 程序的拓扑图。拓扑图可以保存为各种格式:png 、jpg 、pdf 、svg 等等,非常方便。

]]>
Kafka 数据同步 tag:www.v2ex.com,2022-06-28:/t/862662 2022-06-28T03:55:41Z 2022-06-28T05:17:50Z yingqiuQAQ member/yingqiuQAQ 想把 kafka topic 的 json 数据同步到 ES ,目前业界有没有通用的办法? 不需要原生数据所有字段都导入, 需要导入前做一次数据处理。

kafka 小白,有没有大佬指点一下

]]>
请教一下 kafka group 数量比较大对 kafka 性能影响大吗 tag:www.v2ex.com,2022-06-20:/t/860925 2022-06-20T09:33:15Z 2022-06-20T09:32:15Z ymy3232 member/ymy3232 一个 topic 会对应 500-1000 个 group ,每个 group 下只有一个 consumer
用来广播的 topic 消息量不会很大(<1w/day ) kafka 中其他 topic 流量会很大
不太深入 kafka 的原理 怕影响其他 topic 的性能

或者 用 redis 的 pub/sub 实现会更好吗 ]]>
为什么很多场景数据先写入 kafka 再写入 elastic,而不是直接写 elastic? tag:www.v2ex.com,2021-12-12:/t/821725 2021-12-12T14:36:32Z 2021-12-12T15:57:33Z daoqiongsi1101 member/daoqiongsi1101 是因为直接写 elastic 会造成 es 压力太大吗,所以用 kafka 缓冲一下?

]]>
Golang Kafka Writer 消息被截断 tag:www.v2ex.com,2021-12-09:/t/821035 2021-12-09T01:56:21Z 2021-12-09T01:55:21Z ghjacky member/ghjacky
* 目前看到,从 buffer 中读取到的消息都是完整的,但是从 kafka 消费出来的消息很多都被截断了,差不多 30%多

* 每个 topic n 个 partition ,1 个 group ,n 个消费者

* 每条消息的长度从 2k 到 10k 不等,也有更长的,但 90%多在 2k 到 10k 之间

* 被截断的消息:截断为 n 段( n 不确定),比较大的一部分基本都处于 4000 到 8000 个字节之间,小的部分可能就几个字节

**详细信息如上**
**各位,帮忙看下是什么原因导致的,先谢过🙏** ]]>
kakfa producer 发消息会堵塞么? kakfa 的 producer 阻塞该怎么查 tag:www.v2ex.com,2021-10-21:/t/809449 2021-10-21T03:08:28Z 2021-10-21T03:08:28Z Or2 member/Or2
谢谢拉 ]]>
请问一下实际业务中, kafka 的消费者组一般应用于什么场景? tag:www.v2ex.com,2021-09-20:/t/803113 2021-09-20T15:32:16Z 2021-09-20T17:56:33Z cernard member/cernard 如题所述,最近在看 kafka,对消费者组的实际应用有点疑惑,求各位赐教。

希望可以展开说说:

  1. topic 在业务中如何定义

  2. partition 在业务中如何定义,对于生产者和消费者而言,partition 意味着什么

  3. 消费者组在业务中的应用场景是什么样的?

  4. kafka 在不同业务中有哪些最佳实践和骚操作?

]]>
kafka 多线程消费是否必须手动提交 offset/partion 才能避免竞争 tag:www.v2ex.com,2021-07-27:/t/792137 2021-07-27T13:59:20Z 2021-07-27T19:01:15Z akmonde member/akmonde rt,我这边遇到个问题,需要 kafka 多线程消费数据。

已知同一个 groupid,能控制多个消费者竞争问题,不会出现同一条数据被多个消费者重复读取。

但是多个线程同时去读,是否必须手动提交 offset,auto_commit 不知道能否满足要求?

我在网上看到的 case,基本上是让本地建个临时 sqlite 库,根据 partion 和线程对应去消费,手动提交 offset 。

比如:https://www.cnblogs.com/lshan/p/11647485.html

我不知道最佳实践是怎样的?

各位大佬,很急在线等!

]]>
求一个基于 kafka 的消息消费框架 tag:www.v2ex.com,2021-07-21:/t/790957 2021-07-21T16:08:24Z 2021-07-21T18:05:24Z Euthpic member/Euthpic 背景: 我们现有的缓存同步方案基于 canal 和 kafka,db 更新时 canal 拉取 binlog 发消息到 kafka,然后多个业务方各自消费消息.

缺点: 1.缺少统一的调度,消费者零散地散落在各个项目里,消息堆积时不好扩容. 2.同一条消息(对同一张表的一条操作记录)会下发到多个消费者(不同的业务逻辑),浪费网络资源.同时 binlog 的消息是全量下发(所有表的操作记录推到同一个 topic),消费者还得各自筛选自己需要的消息,浪费 cpu 资源. 3.消费者之间可能有依赖关系,但是业务逻辑是解耦的,不能相互调用,因此无法感知到依赖的资源是否已经到位.

所以我们计划把这些消费者整合到同一个项目里面统一管理,统一调度. 深思熟虑了 5 分钟之后,我感觉可能遇到这些问题: 1.如何协调消费者之间的依赖关系?如果直接把它们丢到一个串行的方法里面,那么调用链就很长,消息延迟就很严重,有些消费者本来没有前置依赖,但却要白白等前面的消费者执行完,不合理.如果都是异步去调用它们的话,就无法感知到依赖关系. 2.消息消费的速度会不会受到影响?以前一条消息开了很多消费者去消费,现在整合到一起,调用链变长了.

所以想问问大家有没有现成的开源框架是解决这类问题的? 我们开发的语言是 scala 和 java,mq 是 kafka,当然消息源最好也能支持其他 mq

]]>
kafka 如何实现每 10 秒拉一次数据? tag:www.v2ex.com,2021-07-20:/t/790553 2021-07-20T02:45:11Z 2021-07-20T06:56:30Z ex1gtnim7d member/ex1gtnim7d 如题,我在生产者端每 0.5 秒发送一个消息,消息大约 4KB 一个

在消费者端配置了下面两个参数,以保证消费者每 10 秒能够回调一次

fetch-min-bytes = Integer.MAX_VALUE (当一次拉取请求的数据小于这个值,就会等待直到满足这个参数,这里我设到最大值) fetch-max-wait-ms: 10000 (如果等待超过这个值就直接返回,这里设为 10 秒) 

同时我是用批量消费的方式进行的,每次回调都会打印一次时间间隔观察实际消费情况,发现消费者在每 10 秒的时候总会拉取两次,但我希望它只拉取一次

KafkaConsumer--->==:10s size:6 KafkaConsumer--->==:0s size:14 KafkaConsumer--->==:9s size:7 KafkaConsumer--->==:0s size:13 

所以比较疑惑是触发了哪个参数导致它会多回调一次

btw,我尝试过把下面这些参数都调到最大,但都无济于事

send.buffer.bytes = Integer.MAX_VALUE receive.buffer.bytes = Integer.MAX_VALUE max.partition.fetch.bytes Integer.MAX_VALUE fetch.max.bytes = Integer.MAX_VALUE max.poll.records = Integer.MAX_VALUE 

有没有熟悉 kafka 的大佬帮忙解答一二

]]>
蹲一个 Kafka 大神,新增 partition 没有引起消费组的 rebalance,偶现 tag:www.v2ex.com,2021-07-02:/t/787211 2021-07-02T11:44:37Z 2021-07-02T11:44:37Z fov6363 member/fov6363 详见: https://github.com/Blizzard/node-rdkafka/issues/898

]]>
kafka 如何知道生产者的 IP? tag:www.v2ex.com,2021-06-21:/t/784750 2021-06-21T02:40:00Z 2021-06-21T02:56:43Z laobiao member/laobiao Python 消费 ka-f-a-k 时无限挂起,如何定位原因 tag:www.v2ex.com,2021-06-18:/t/784353 2021-06-18T13:23:43Z 2021-06-18T13:40:43Z css3 member/css3 直接通过ka,fka 命令行是可以消费的,但通过 python 消费时,一直消费不到,进程也不超时,更换消费组,消费lastet最新 msg 也无响应, consume.poll(1000, 1) 第一个参数的 timeout 仿佛无效,设置了也是一直等待消费

import time from kafka import KafkaConsumer topic1 = 'additional_order' host = '192.168.14.55:9092' cOnsume= KafkaConsumer(topic, group_id="group1", bootstrap_servers=host, auto_offset_reset='latest', security_protocol='SASL_PLAINTEXT', sasl_mechanism='PLAIN', sasl_plain_username='admin', sasl_plain_password='$%<a' api_version=(0, 10) ) while True: count += 1 if time.time() - start_time &gt; 1 * 60: print('超时,退出') break msg = consume.poll(1000, 1) # 看上去,进程是一直等候在这里 print(count) 
]]>
Python 消费 kafka 时无限挂起,如何定位原因 tag:www.v2ex.com,2021-06-18:/t/784348 2021-06-18T12:57:27Z 2021-06-18T15:10:13Z css3 member/css3 直接通过 kafka 命令行是可以消费的,但通过 python 消费时,一直消费不到,进程也不超时

 import time from kafka import KafkaConsumer topic1 = 'additional_order' host = '192.168.14.55:9092' cOnsume= KafkaConsumer(topic, group_id="group1", bootstrap_servers=host, auto_offset_reset='latest', security_protocol='SASL_PLAINTEXT', sasl_mechanism='PLAIN', sasl_plain_username='admin', sasl_plain_password='$%foper!@#$', api_version=(0, 10) ) while True: count += 1 if time.time() - start_time > 1 * 60: print('超时,退出') break msg = consume.poll(1000, 1) # 看上去,进程是一直等候在这里 print(count) 
]]>
关于 PHP Rdkafka 消费者性能讨论 tag:www.v2ex.com,2021-05-11:/t/776193 2021-05-11T03:19:04Z 2021-05-11T08:51:59Z yuandj member/yuandj 当下遇到的问题:

服务提供商: 1. 集群每个节点的吞吐量在 1.5 MB/s 左右,远小于服务的吞吐量 2. 3 个节点每个 topic 设置 90 个分区, 3 副本,这个使用方式不太合理,服务需要对每个 topic 维护 90x3 个 replica 进程,io process 也要维护 90x3 个,原来顺序的读写也会退化为随机读写,网络 process 需要维护 90 个 3. 看历史监控记录,副本延迟在过去是会频繁发生的 4. 之前有建议您修改分区到 6 ~ 9 个 您这边反馈分区数调低之后消费者有延迟,实际您这边的吞吐量远没有达到服务应该有的吞吐量,怀疑是客户端方面有问题,需要您在消费端打印每次 poll 的时间和 poll 下来的消息条数,确定消费者行为,这样我们可以进一步分析 现在我们这边的解决方案还是和之前的建议一样,topic 分区数调整到 6 ~ 9 个,消费延迟的问题需要从客户端出发解决 开发者: 调整为 6 个分区之后,不是消费延迟问题,是单个消费者的能力不足,跟不上生产的速度。之前已经试过了,10 来分钟就堆积了 100 万消息。 服务提供商: 6 个分区的话,可以使用 6 个消费者,6 个消费者的能力远不止这么差. max.poll.records,可以用于指定批量消费条数的 配合配置 max.partition.fetch.byte 和 fetch.max.wait.ms 两个参数 可以实现批量消费 kafka 的消息。您看看 php 的客户端是否有设置这些参数的地方,或者有其他地方可以设置消费者的批量消费的,因为一条条的消费,效率是极低的 开发者: rdkafka 扩展里,好像没这个相关的参数 

当前是 1 个 topic,90 个分区,分区数太多引起 kafka 集群副本同步时的性能下降问题。服务商建议减少分区数,但是减少分区数会有大量的消息堆积,rdkafka 如何提升单消费者的性能呢?

消费者大致代码如下:

$this->RdKafkaCOnf= new RdKafka\Conf(); $this->RdKafkaConf->setRebalanceCb(function (RdKafka\KafkaConsumer $kafka, $err, array $partitiOns= null) { switch ($err) { case RD_KAFKA_RESP_ERR__ASSIGN_PARTITIONS: $kafka->assign($partitions); break; case RD_KAFKA_RESP_ERR__REVOKE_PARTITIONS: $kafka->assign(null); break; default: throw new \Exception($err); } }); $this->RdKafkaConf->set('group.id', $groupid); // Initial list of Kafka brokers $this->RdKafkaConf->set('metadata.broker.list', $configs); $this->RdKafkaConf->set('socket.keepalive.enable', 'true'); $this->RdKafkaConf->set('enable.auto.commit', 'true'); $this->RdKafkaConf->set('auto.commit.interval.ms', '100'); $this->RdKafkaConf->set('auto.offset.reset', 'smallest'); $topic = is_array($topic) ? $topic : [$topic]; $cOnsumer= new RdKafka\KafkaConsumer($this->RdKafkaConf); $consumer->subscribe($topic); while (true) { $message = $consumer->consume($timeout * 1000); switch ($message->err) { case RD_KAFKA_RESP_ERR_NO_ERROR: call_user_func_array($callback, [$message]); // $consumer->commitAsync($message); break; case RD_KAFKA_RESP_ERR__PARTITION_EOF: // Log::get('consumer')->info("No more messages; will wait for more"); break; case RD_KAFKA_RESP_ERR__TIMED_OUT: // Log::get('consumer')->error("Timed out"); break; default: throw new \Exception($message->errstr(), $message->err); } } //callback function if (count(self::$queue) >= 10 || (time() - $this->lastWriteTimestamp) >= 1) { self::$queue[] = $msg; $queue = self::$queue; self::$queue = []; $this->lastWriteTimestamp = time(); $reportData = []; foreach ($queue as $message) { $data = json_decode($message->payload, true); // 入库 } } else { self::$queue[] = $msg; } 
]]>
xshell 无法使用 kafka 命令行发送消息到 topic tag:www.v2ex.com,2021-01-18:/t/745873 2021-01-18T04:45:33Z 2021-01-16T04:43:33Z git00ll member/git00ll 想要使用使用命令向 kafka 内发送消息 ./kafka-console-producer.sh --broker-list host:2181 --topic KAFKA_TEST

我在本地( windows )启动 kafka,使用 PowerShell,命令执行完成后出现右箭头,输入内容后按回车,消息会被发送出去。

当我使用 xshell 连接到服务器上,尝试同样的操作, 输入内容按回车,理论上会将数据发送出去,实际上却换行了,导致我无法将数据发送出去。 我觉得这应该是 xshell 的问题,但我却不知道怎么做。 也不排除是 kafka 版本的问题

kafka 版本:kafka_2.11-2.3.0

xshell 版本: xshell6

]]>
[Kafka] 求助, 同一个服务如何组播消费 kafka 某个 topic 的消息呢? tag:www.v2ex.com,2020-08-21:/t/700133 2020-08-21T01:20:30Z 2020-08-21T12:48:13Z BBCCBB member/BBCCBB

我现在用的是启动的时候动态生成 groupId, 比如 name + uuid 的方式

但是这样重启后就会导致原来的 consumerGroup 对应的实例都被销毁了.但 kafka 里依然存在原来的 consumerGroup, 监控上看已经被销毁的 consumerGroup 也会发现堆积越来越严重, 有谁知道正确的使用姿势吗??

不胜感激

😢

]]>
kafka 非常非常非常难用 tag:www.v2ex.com,2020-03-25:/t/656179 2020-03-25T12:44:50Z 2020-03-26T05:56:32Z fumeboy member/fumeboy // 如果我说它不好,应该会有大佬走出来告诉我它应该怎么用,嗯!

我通过 docker 在本地部署 kafka,之后在容器内部用 console-producer 和 console-consumer 脚本试了一下,功能是正常的,但容器外使用 golang 程序( sarama )连接却无法成功

zookeeper 中的注册信息是这样的:

get /brokers/ids/1001 {"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://localhost:9092"],"jmx_port":-1,"host":"localhost","timestamp":"1585138788130","port":9092,"version":4} 

docker 部署时使用的参数是:

KAFKA_ADVERTISED_HOST_NAME: localhost KAFKA_CREATE_TOPICS: "test:1:2" KAFKA_BROKER_ID: 1 KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 

kafka 版本 2.4.0, zookeeper 版本 3.4.13

sarama 反馈信息:“kafka: client has run out of available brokers to talk to (Is your cluster reachable?)”

sarama log:

[sarama] 2020/03/25 20:41:02 client/metadata fetching metadata for all topics from broker 127.0.0.1:9092 [sarama] 2020/03/25 20:41:02 Connected to broker at 127.0.0.1:9092 (unregistered) [sarama] 2020/03/25 20:41:02 client/metadata got error from broker -1 while fetching metadata: read tcp 127.0.0.1:52260->127.0.0.1:9092: read: connection reset by peer [sarama] 2020/03/25 20:41:02 Closed connection to broker 127.0.0.1:9092 [sarama] 2020/03/25 20:41:02 client/metadata no available broker to send metadata request to [sarama] 2020/03/25 20:41:02 client/brokers resurrecting 1 dead seed brokers [sarama] 2020/03/25 20:41:02 Closing Client kafka: client has run out of available brokers to talk to (Is your cluster reachable?) 
]]>
有什么办法可以让 kafka 消费者走代理么? tag:www.v2ex.com,2020-02-03:/t/641851 2020-02-03T07:16:17Z 2020-02-03T13:36:04Z ysn2233 member/ysn2233 因为现在要在家办公,家里不能直接消费服务器的 kafka,端口访问不了,连上公司 vpn 也不行,但是可以 ssh 到我公司的台式机( Linux 系统),有没有办法在公司台机上做个代理来消费? kafka 的协议可以走酸酸么……或者有别的什么现成的轮子。

]]>
如何在消息消费者多实例(Cluster)的情况下保证应用级别的精确分发? tag:www.v2ex.com,2019-12-27:/t/632758 2019-12-27T01:26:31Z 2019-12-27T01:37:06Z hrong member/hrong 微服务之间的消息通讯用发送和接收消息的方式 ,依赖消息中间件。

现在,为了保证服务的高可用性和水平扩展,服务是水平扩展的,但是现在有一种需求,要求消息从发送完后到接收响应的整条链路不受水平扩展( Cluster )的影响,也就是说 ,即使 scale out 了,业务应用级别的一条消息及他的响应,要保证能够从 A 发的,也到响应回到 A,而不是 A1 或 A2

请教大家,为了实现这个,要考虑从什么方式切入进行改造?

]]>
各位大佬, zookeeper 加了 digest , kafka 要怎么改配置啊? tag:www.v2ex.com,2019-11-12:/t/618830 2019-11-12T07:44:01Z 2019-11-12T07:41:01Z Wh0amis member/Wh0amis RT。求大佬指导

]]>
Kafka 需不需要设置安全认证 tag:www.v2ex.com,2019-11-01:/t/615348 2019-11-01T09:28:29Z 2020-01-05T21:10:58Z defke member/defke 小白向各位大佬请教,因为业务要求,需要用到 kafka,不知道各位大佬生产服的 kafka 集群是在内网访问的吗?如果外部可以访问有没有设置安全认证?用的是哪种方式呢?

]]>
springboot 集成 kafka 广播式消费 tag:www.v2ex.com,2019-10-22:/t/611653 2019-10-22T02:27:08Z 2019-10-22T02:24:08Z Yjk member/Yjk 项目是 springboot 集成 kafka ,生产环境有四台实例部署.我想实现 Kafka 广播式消费, 需要每个实例拥有不同的 groupId,那么我在 springboot 中需要如何配置呢? 每个实例跑的代码和配置中心的配置都是相同的.

]]>
kafka 疑惑,为什么随着 topic 增加,性能会急剧下降 tag:www.v2ex.com,2019-09-12:/t/600336 2019-09-12T03:38:23Z 2019-09-12T07:03:35Z wmhack member/wmhack 网上很多文章拿 rocketmq 与 kafka 比,都说 kafka 在 topic 超过 200 个的时候,性能急速下降,而 RocketMq 性能稳定。

但是都没有说原因,想问问各位大神,这是什么原因造成了 kafka 性能下降,而 RocketMQ 性能稳定呢?

还有,当消息大小超过 2048 的时候,kafka 性能也会下降,RocketMq 性能稳定,这又是什么原因呢?

]]>
求 kafka 的 docker 镜像? tag:www.v2ex.com,2019-09-09:/t/599401 2019-09-09T10:59:18Z 2019-09-09T06:56:18Z sadfQED2 member/sadfQED2 本地需要搞一个测试环境,结果照着 https://www.jianshu.com/p/4cc49ba6c26c 这个文章搭,kafka 镜像根本运行不起来啊???? ubuntu 系统

有没有那种 zookeeper 和 kafka 打包到一个镜像里面的呀

]]>
有老哥知道怎么给 kafka 某个 topic 创建消费组 tag:www.v2ex.com,2019-07-24:/t/585783 2019-07-24T06:31:03Z 2019-08-03T11:29:20Z HansCathy member/HansCathy 准备写个基于 kafka 的延迟队列, 有感兴趣的吗 tag:www.v2ex.com,2019-05-29:/t/568856 2019-05-29T09:53:27Z 2019-08-23T22:28:51Z petelin member/petelin 解决的问题: kafka 不支持延迟队列

如何解决: 如果是延迟小时, push 之前先放到 redis 里, 然后 work 通过 lua 轮训拿到需要真的 push 到队列里的请求, 然后 push 到 kafka 里.

整个功能其实和 Python 的 celery 或者 Go 的 machinery 很像.但是前者需要单独部署项目太复杂, 后者不支持 kafka.

有搞头吗?

]]>
问一个消息队列的问题 tag:www.v2ex.com,2019-05-09:/t/562470 2019-05-09T03:50:00Z 2019-05-09T10:03:52Z Yuicon member/Yuicon 有同学在生产环境里用过 Apache Kafka 么?能否分享一下你踩过的坑? tag:www.v2ex.com,2019-04-23:/t/558092 2019-04-23T17:35:38Z 2019-04-24T07:18:45Z Livid member/Livid Kafka 内存陡然降低问题 tag:www.v2ex.com,2019-01-09:/t/525259 2019-01-09T02:13:54Z 2019-01-09T13:38:09Z qwefdrt member/qwefdrt 然后当时的日志里显示:
[2019-01-09 01:08:05,297] WARN Send worker leaving thread (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2019-01-09 01:08:05,296] INFO Received connection request /(org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2019-01-09 01:08:05,447] ERROR Unreasonable buffer length: 100000 (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2019-01-09 01:08:05,547] INFO Received connection request /(org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2019-01-09 01:08:05,564] WARN Connection broken for id 8444275087900673, my id = 1, error = (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.io.IOException: Received packet with invalid packet: 0
at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.run(QuorumCnxManager.java:1012)
[2019-01-09 01:08:05,565] WARN Interrupting SendWorker (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2019-01-09 01:08:05,595] WARN Interrupted while waiting for message on queue (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.lang.InterruptedException
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.reportInterruptAfterWait(AbstractQueuedSynchronizer.java:2014)
at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.awaitNanos(AbstractQueuedSynchronizer.java:2088)
at java.util.concurrent.ArrayBlockingQueue.poll(ArrayBlockingQueue.java:418)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.pollSendQueue(QuorumCnxManager.java:1094)
at org.apache.zookeeper.server.quorum.QuorumCnxManager.access$700(QuorumCnxManager.java:74)
at org.apache.zookeeper.server.quorum.QuorumCnxManager$SendWorker.run(QuorumCnxManager.java:929)
[2019-01-09 01:08:05,597] WARN Send worker leaving thread (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2019-01-09 01:08:05,597] INFO Received connection request (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2019-01-09 01:08:05,646] WARN Connection broken for id 3377699988963328, my id = 1, error = (org.apache.zookeeper.server.quorum.QuorumCnxManager)
java.io.IOException: Received packet with invalid packet: 0
at org.apache.zookeeper.server.quorum.QuorumCnxManager$RecvWorker.run(QuorumCnxManager.java:1012)
[2019-01-09 01:08:05,670] WARN Interrupting SendWorker (org.apache.zookeeper.server.quorum.QuorumCnxManager)
[2019-01-09 01:08:05,670] WARN Interrupted while waiting for message on queue (org.apache.zookeeper.server.quorum.QuorumCnxManager)

请问 ERROR Unreasonable buffer length: 100000 这个是什么原因造成的,应该如何解决? ]]>
ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86