半兽人

353 声望

只有比别人更早、更勤奋地努力,才能尝到成功的滋味。

只有比别人更早、更勤奋地努力,才能尝到成功的滋味。

个人动态
  • 昨天
  • 14天前
  • 发表了 iSCSI介绍  
    14天前
  • what 回复 半兽人org.apache.kafka.common.KafkaException: Socket server failed to bind to 172.18.0.5:9092: Cannot assign requested address. 中 :

    感谢,ip确实是错的,因为我是容器启动的,这个ip被别的容器占用了。

    15天前
  • 15天前
  • 半兽人 回复 whatorg.apache.kafka.common.KafkaException: Socket server failed to bind to 172.18.0.5:9092: Cannot assign requested address. 中 :

    这个错误日志关键在这两行:

    Caused by: org.apache.kafka.common.KafkaException: Socket server failed to bind to 172.18.0.5:9092: Cannot assign requested address.
    Caused by: java.net.BindException: Cannot assign requested address
    

    意思是:
    Kafka 启动时尝试绑定(监听)172.18.0.5:9092 这个地址,但这个地址在容器里不存在或无效,导致启动失败。

    你看下你的ip是不是不存在。

    15天前
  • & 回复 半兽人docker部署kafka集群开启SCRAM报错 中 :

    谢谢大佬,我起来了

    15天前
  • 赞了 半兽人启动kafka时候,报java.net.bindException: cannot assign requested address错误? 的评论!

    ip不存在,不能使用外网,绑定内网ip。

    15天前
  • 半兽人 赞了 在 启动kafka时候,报java.net.bindException: cannot assign requested address错误? 的评论!

    ip不存在,不能使用外网,绑定内网ip。

    15天前
  • 半兽人 回复 &docker部署kafka集群开启SCRAM报错 中 :

    你的KAFKA_SASL_ZOOKEEPER_ENABLED:false没有生效,依然需要zk认证才能生效,但是我并没有找到相关的配置,所以在zk上添加认证,如下:

    version: '3.8'
    
    services:
      zookeeper:
        image: confluentinc/cp-zookeeper:7.6.1
        hostname: zookeeper
        container_name: zookeeper
        environment:
          ZOOKEEPER_CLIENT_PORT: 2181
          ZOOKEEPER_TICK_TIME: 2000
          ZOOKEEPER_MAXCLIENTCNXNS: 0
          ZOOKEEPER_AUTHPROVIDER.1: org.apache.zookeeper.server.auth.SASLAuthenticationProvider
          ZOOKEEPER_REQUIRECLIENTAUTHSCHEME: sasl
          ZOOKEEPER_JAASLOGINRENEW: 3600000
          KAFKA_OPTS: -Djava.security.auth.login.config=/etc/kafka/jaas/zk_server_jaas.conf
        ports:
          - "2181:2181"
        volumes:
          - ./zoo_jaas:/etc/kafka/jaas
      kafka:
        image: confluentinc/cp-kafka:7.6.1
        hostname: broker
        container_name: kafka
        depends_on:
          - zookeeper
        ports:
          - "9092:9092"
          - "9093:9093"
        environment:
          KAFKA_BROKER_ID: 1
          KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
          KAFKA_LISTENERS: PLAINTEXT://0.0.0.0:9092,SASL_PLAINTEXT://0.0.0.0:9093
          KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:9092,SASL_PLAINTEXT://broker:9093
          KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,SASL_PLAINTEXT:SASL_PLAINTEXT
          KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
          KAFKA_SASL_ENABLED_MECHANISMS: SCRAM-SHA-512
          KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: SCRAM-SHA-512
          KAFKA_OPTS: "-Djava.security.auth.login.config=/etc/kafka/jaas/kafka_server_jaas.conf"
        volumes:
          - ./kafka_jaas:/etc/kafka/jaas
    

    zoo_jaas/zk_server_jaas.conf

    Server {
        org.apache.zookeeper.server.auth.DigestLoginModule required
        user_admin="admin-secret";
    };
    

    kafka_jaas/kafka_server_jaas.conf

    KafkaServer {
        org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="admin-secret"
        user_admin="admin-secret"
        user_alice="alice-secret";
    };
    
    Client {
        org.apache.zookeeper.server.auth.DigestLoginModule required
        username="admin"
        password="admin-secret";
    };
    

    测试命令:

    telnet localhost 9092
    telnet localhost 9093
    

    你可以对比一下,我已经运行成功。

    15天前
  • 1月前
  • 枫&Vce 回复 半兽人AI教程 中 :

    学习了

    1月前
  • 無名 赞了 在 什么是Low-Level Server? 的评论!

    “Low-Level Server”这个名字,源于软件开发中一个常见的术语:“low-level”(低层/底层)。它不是说“服务器很差”,而是强调它比高级封装更接近底层、原始的实现,意思是:

    1. 什么是 “Low-Level Server”?

    在 MCP 框架中,Low-Level Server 是一种更接近协议核心、需要你手动控制生命周期、注册处理函数的服务器写法,也就是说:

    • 你负责:

      • 启动关闭逻辑(生命周期)
      • 注册处理函数(比如 call_tool()list_prompts() 等)
      • 管理数据资源(比如数据库连接)
      • 使用低层 API(如 server.run()

    它不像官方的 mcp runmcp dev 那样封装好一整套流程(这些是 high-level 工具,自动帮你处理各种事情)。

    2. 为什么叫 “low-level”?

    • 因为这是“手动控制一切”的模式,没有帮你封装生命周期、标准输入输出处理、异常处理等。
    • 和 “high-level”(高级封装) 相对:

      • high-level 例子:uv run mcp run
      • low-level:你自己写 server.run(...),你控制 lifespan,你处理 stream

    就像 Python 的 asyncio

    • high-level:asyncio.run(main())
    • low-level:你用 loop = asyncio.get_event_loop() 手动跑 loop

    3. 什么时候要用 low-level server?

    用它是为了“更细粒度的控制”,适合这几种场景:

    场景 为什么用 low-level server
    你想注册多个自定义 handler,比如 get_promptcall_tool 高级接口可能不够灵活
    你想控制资源生命周期,比如连接数据库、清理缓存 需要用 lifespan
    你要接入自定义协议或更复杂的启动流程 高级封装不支持
    你不想使用 mcp runuv run 这些不支持 low-level server

    4. 总结一句话:

    “low-level server” 指的是一种更底层、自由度更高、但需要你自己处理细节的服务器写法。适合需要完全控制启动流程、资源管理、自定义能力的高级开发者。

    3月前
  • 赞了 半兽人什么是Low-Level Server? 的评论!

    “Low-Level Server”这个名字,源于软件开发中一个常见的术语:“low-level”(低层/底层)。它不是说“服务器很差”,而是强调它比高级封装更接近底层、原始的实现,意思是:

    1. 什么是 “Low-Level Server”?

    在 MCP 框架中,Low-Level Server 是一种更接近协议核心、需要你手动控制生命周期、注册处理函数的服务器写法,也就是说:

    • 你负责:

      • 启动关闭逻辑(生命周期)
      • 注册处理函数(比如 call_tool()list_prompts() 等)
      • 管理数据资源(比如数据库连接)
      • 使用低层 API(如 server.run()

    它不像官方的 mcp runmcp dev 那样封装好一整套流程(这些是 high-level 工具,自动帮你处理各种事情)。

    2. 为什么叫 “low-level”?

    • 因为这是“手动控制一切”的模式,没有帮你封装生命周期、标准输入输出处理、异常处理等。
    • 和 “high-level”(高级封装) 相对:

      • high-level 例子:uv run mcp run
      • low-level:你自己写 server.run(...),你控制 lifespan,你处理 stream

    就像 Python 的 asyncio

    • high-level:asyncio.run(main())
    • low-level:你用 loop = asyncio.get_event_loop() 手动跑 loop

    3. 什么时候要用 low-level server?

    用它是为了“更细粒度的控制”,适合这几种场景:

    场景 为什么用 low-level server
    你想注册多个自定义 handler,比如 get_promptcall_tool 高级接口可能不够灵活
    你想控制资源生命周期,比如连接数据库、清理缓存 需要用 lifespan
    你要接入自定义协议或更复杂的启动流程 高级封装不支持
    你不想使用 mcp runuv run 这些不支持 low-level server

    4. 总结一句话:

    “low-level server” 指的是一种更底层、自由度更高、但需要你自己处理细节的服务器写法。适合需要完全控制启动流程、资源管理、自定义能力的高级开发者。

    3月前
  • 半兽人 赞了 在 什么是Low-Level Server? 的评论!

    “Low-Level Server”这个名字,源于软件开发中一个常见的术语:“low-level”(低层/底层)。它不是说“服务器很差”,而是强调它比高级封装更接近底层、原始的实现,意思是:

    1. 什么是 “Low-Level Server”?

    在 MCP 框架中,Low-Level Server 是一种更接近协议核心、需要你手动控制生命周期、注册处理函数的服务器写法,也就是说:

    • 你负责:

      • 启动关闭逻辑(生命周期)
      • 注册处理函数(比如 call_tool()list_prompts() 等)
      • 管理数据资源(比如数据库连接)
      • 使用低层 API(如 server.run()

    它不像官方的 mcp runmcp dev 那样封装好一整套流程(这些是 high-level 工具,自动帮你处理各种事情)。

    2. 为什么叫 “low-level”?

    • 因为这是“手动控制一切”的模式,没有帮你封装生命周期、标准输入输出处理、异常处理等。
    • 和 “high-level”(高级封装) 相对:

      • high-level 例子:uv run mcp run
      • low-level:你自己写 server.run(...),你控制 lifespan,你处理 stream

    就像 Python 的 asyncio

    • high-level:asyncio.run(main())
    • low-level:你用 loop = asyncio.get_event_loop() 手动跑 loop

    3. 什么时候要用 low-level server?

    用它是为了“更细粒度的控制”,适合这几种场景:

    场景 为什么用 low-level server
    你想注册多个自定义 handler,比如 get_promptcall_tool 高级接口可能不够灵活
    你想控制资源生命周期,比如连接数据库、清理缓存 需要用 lifespan
    你要接入自定义协议或更复杂的启动流程 高级封装不支持
    你不想使用 mcp runuv run 这些不支持 low-level server

    4. 总结一句话:

    “low-level server” 指的是一种更底层、自由度更高、但需要你自己处理细节的服务器写法。适合需要完全控制启动流程、资源管理、自定义能力的高级开发者。

    3月前
  • 西宫. ​ 赞了 在 docker中文教程 的评论!

    2022开工大吉。
    「即使现在,对手也不停地翻动书页。」 --- 《哈佛图书馆二十条训言》

    4月前
  • 赞了 半兽人kafka2.4.0的MirrorMaker2.0配置问题 的评论!

    是的,kafka 2.4还不支持2.0,所以你的还是1.0版本。

    解决,升级kafka版本

    • kafka 2.6+ 后是支持的。

    可参考:https://cwiki.apache.org/confluence/display/KAFKA/KIP-382%3A+MirrorMaker+2.0

    5月前
  • 半兽人 赞了 在 kafka2.4.0的MirrorMaker2.0配置问题 的评论!

    是的,kafka 2.4还不支持2.0,所以你的还是1.0版本。

    解决,升级kafka版本

    • kafka 2.6+ 后是支持的。

    可参考:https://cwiki.apache.org/confluence/display/KAFKA/KIP-382%3A+MirrorMaker+2.0

    5月前
  • 夜雨 赞了 在 kafka发送延时消息 的评论!

    可以使用RabbitMQ,Kafka天然不支持做延迟队列,因为它的消息没有状态。

    7月前
  • ? 赞了 在 Kubernetes安装Kafka集群 的评论!

    嗯,k8s的版本,所以对参数有区别,可以参考:https://www.kubebiz.com/KubeBiz/kafka
    里面有k8s的版本选择,会自动补全。

    8月前
  • Z 关注了Ta · 8月前
  • 赞了 半兽人volatile关键字解析 - java并发 的评论!

    噢噢噢,
    volatile不保证原子性

    8月前
  • 怎奈 赞了 在 KafkaStreams客户端(0.10.1.1 API) 的评论!

    好的,我最近更新一下

    9月前
  • 怎奈 赞了 在 Kubernetes StatefulSet介绍 的评论!

    好的,我尽快补充,我以为人看的少 :(

    9月前
  • 土豆 赞了 在 镜像拉取失败google_containers/kicbase:v0.0.45 的评论!

    一般是基础镜像的问题:

    先手动拉取:

    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.45
    

    然后手动指定基础镜像:

    minikube start --force --base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.45'
    
    1年前
  • 赞了 半兽人CDH Kafka 配置权限未生效 的评论!
    enabled mechanisms are []
    

    启用的机制是空,并没有生效,先看看kafka日志中是否有什么异常。
    另外,我看你配置里有些其他的认证方式,建议你注掉,防止干扰。
    可参考:https://www.orchome.com/1966
    先保证命令行可以运行成功。

    1年前
  • 赞了 半兽人CDH Kafka 配置权限未生效 的评论!
    LISTENERS=listeners=PLAINTEXT://phm-data02:9092,
    

    这个换成

    LISTENERS=listeners=SASL_PLAINTEXT://phm-data02:9092
    
    1年前
  • 赞了 半兽人镜像拉取失败google_containers/kicbase:v0.0.45 的评论!

    一般是基础镜像的问题:

    先手动拉取:

    docker pull registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.45
    

    然后手动指定基础镜像:

    minikube start --force --base-image='registry.cn-hangzhou.aliyuncs.com/google_containers/kicbase:v0.0.45'
    
    1年前
  • Sisyphus 关注了Ta · 1年前
  • yh 关注了Ta · 1年前
  • 赞了 半兽人Kubernetes Namespace命名空间状态为Terminating,一直处于“卡住”,我该如何删除它? 的评论!

    无法删除是因为命名空间中仍然存在的资源引起的。

    以下命令显示命名空间中剩余的资源:

    kubectl api-resources --verbs=list --namespaced -o name \
      | xargs -n 1 kubectl get --show-kind --ignore-not-found -n <namespace>
    

    一旦你移除了这些资源之后,命名空间就能删掉了。

    1年前
  • g 关注了Ta · 1年前
  • 🌂️ 关注了Ta · 1年前
  • 赞了 NFS 高可用部署 · 1年前
  • 赞了 半兽人外网连接内网kafka-kerberos 报错验证失败! 的评论!

    感谢大佬的指点,目前已经全部调通,包括kerberos环境!

    非kerberos环境最后配置的格式就是上面贴的。
    kerberos环境 大致还需要以下几点。

    1、kafka-server端加了环境变量

    export KAFKA_OPTS="-Djava.security.auth.login.config=/usr/hdp/current/kafka-broker/conf/kafka_jaas.conf"
    

    2、/etc/krb5.conf文件可能需要加一行udp_preference_limit = 1 将udp改成tcp防止丢包(这个不一定需要)

    3、客户端需要一个kafka_client_jaas.conf

    KafkaClient {
       com.sun.security.auth.module.Krb5LoginModule required
       useTicketCache=true
       renewTicket=true
       serviceName="kafka";
    };
    Client {
       com.sun.security.auth.module.Krb5LoginModule required
       useTicketCache=true
       renewTicket=true
       serviceName="zookeeper";
    };
    

    4、然后一些sasl的配置,监听器的配置就不赘述了

    总结:之前对“主动发现集群机制”了解不够,也不知道消费时要对每一个broker都开一个长连接* 加上报错一直都是权限验证失败让人感觉是kerberos的问题,绕了很久。后面排除无关的因素,就很明显了。另外提醒ambari安装的kafka不管界面上配置的advertised.listeners是多少,内部代码还是会强行将listeners的值赋给advertised.listeners。

    还是很感谢大佬的及时回复 耐心指导。期待以后更多的交流

    1年前
  • 关注了用户 無名 · 1年前