求教 kafka 的一个问题 : ) - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
请不要在回答技术问题时复制粘贴 AI 生成的内容
ligudo

求教 kafka 的一个问题 : )

  •  
  •   ligudo Jul 30, 2019 3732 views
    This topic created in 2466 days ago, the information mentioned may be changed or developed.

    使用 kafka 实现 websocket 扫码登录,现在测试遇到个问题: kafka 部署在服务器上,使用外置 zookeeper, 服务器和本地分别启动应用, 本地应用可以监听到服务器发送的消息, 服务器获取不到本地发送的 topic 消息。

    求教诸位 V2er :)

    18 replies    2019-07-30 23:33:24 +08:00
    NoOneAI
        1
    NoOneAI  
       Jul 30, 2019   1
    什么错都没报吗?理论上这种网络的问题可能性比较大。
    ligudo
        2
    ligudo  
    OP
       Jul 30, 2019
    @hunterzhang86 嗯,没有报错信息。郁闷,猜想也是网络问题,还没定位到原因
    dooonabe
        3
    dooonabe  
       Jul 30, 2019 via Android   1
    能贴个架构图吗
    fireapp
        4
    fireapp  
       Jul 30, 2019 via iPhone   1
    大概是配置问题,你看看 advertised.listeners,配置的啥,这个是给客户端用的,不一致的话服务端不接受消息,只有空 topic
    NoOneAI
        5
    NoOneAI  
       Jul 30, 2019   1
    @ligudo 试试 telnet broker 对应的端口看通不通,还有发送的测试最好不要写 UT 的方式去发送,直接 main 方法启动 Java 进程发送比较好。
    sirgod
        6
    sirgod  
       Jul 30, 2019   1
    说个题外话,看起来你们是让客户端直接连 kafka 了吗?这样不好吧?
    ligudo
        7
    ligudo  
    OP
       Jul 30, 2019
    @sirgod 木有,哪能这么干我的伙计
    ligudo
        8
    ligudo  
    OP
       Jul 30, 2019
    通常来讲,消息模型可以分为两种, 队列和发布-订阅式。 队列的处理方式是 一组消费者从服务器读取消息,一条消息只有其中的一个消费者来处理。在发布-订阅模型中,消息被广播给所有的消费者,接收到消息的消费者都可以处理此消息。Kafka 为这两种模型提供了单一的消费者抽象模型: 消费者组 ( consumer group )。 消费者用一个消费者组名标记自己。 一个发布在 Topic 上消息被分发给此消费者组中的一个消费者。 假如所有的消费者都在一个组中,那么这就变成了 queue 模型。 假如所有的消费者都在不同的组中,那么就完全变成了发布-订阅模型。 更通用的, 我们可以创建一些消费者组作为逻辑上的订阅者。每个组包含数目不等的消费者, 一个组内多个消费者可以用来扩展性能和容错。

    作者:半兽人
    链接: https://www.orchome.com/5
    来源:OrcHome
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    找到原因了伙计们,即以上所述,基础鸭。
    更改前配置:
    spring:
    kafka:
    consumer:
    group-id: websocket
    更改后配置:
    spring:
    kafka:
    consumer:
    group-id: ${spring.cloud.client.hostname}:${server.port}:websocket
    LeeSeoung
        9
    LeeSeoung  
       Jul 30, 2019   1
    注册到同个 group 的消费者,在你 topic 只有一个分区的情况下只有一个消费者能够消费,你这个问题就是这种情况,可以在输出日志那里看到消费者有没注册成功,也可以在服务端输出消费者信息查看。。
    purensong
        10
    purensong  
       Jul 30, 2019   1
    一个 topic 不是只能给一个 consumer group 中的一个 consumer 消费吗
    LeeSeoung
        11
    LeeSeoung  
       Jul 30, 2019
    @purensong topic 有多分区的话是可以安排给同 group 中的不同 consumer 的。
    xaoduer
        12
    xaoduer  
       Jul 30, 2019   1
    lz 应该是客户端和服务端都在订阅同一个 topic,但是该 topic 只有一个分区,于是就这样了。问题详解我看 lz 上面贴的比较清楚了
    ligudo
        13
    ligudo  
    OP
       Jul 30, 2019
    @xaoduer 嗯,以为 kafka 也类似传统发布 /订阅模型,所以一开始觉得是网络原因,花了老哥半天时间
    laminux29
        14
    laminux29  
       Jul 30, 2019
    题主应该是把 kafka 当成带重试与恢复的高级 rpc 用了,然后又没去 catch kafka 代码里每一处 exception,出了问题自然就不知道了。
    1oNflow
        15
    1oNflow  
       Jul 30, 2019 via iPhone
    @sirgod 客户端不能直接连 kafka 吗?那客户端怎么接收消息啊
    sirgod
        16
    sirgod  
       Jul 30, 2019
    @1oNflow kafka 是后端组件,开放给客户端连接很不安全,客户端接受消息可以从客户端主动连接服务端建立长链接,或者利用长轮询机制
    1oNflow
        17
    1oNflow  
       Jul 30, 2019
    @sirgod 感谢回复,也就是在客户端和 kafka 之间加一个服务器,客户端开 websocket 到服务器,服务器再连到 kafka 吧。
    sirgod
        18
    sirgod  
       Jul 30, 2019
    @1oNflow 是的
    About     Help     Advertise     Blog     API     FAQ     Solana     840 Online   Highest 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 49ms UTC 21:30 PVG 05:30 LAX 14:30 JFK 17:30
    Do have faith in what you're doing.
    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