[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6NV50PJDPMD9V8EVV1WPZSC":3,"skill-same:01M6NV50PJDPMD9V8EVV1WPZSC":60},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":33,"linkOnly":34,"markdownContent":35,"markdownBody":36,"frontMatter":37,"refName":38,"commitSha":39,"skillDirectory":40,"forksCount":14,"repositoryHtmlUrl":41,"repositoryHomepageUrl":6,"ownerHtmlUrl":42,"ownerBlogUrl":43,"ownerDescription":44,"updatedAt":45,"install":46,"resources":59},"01M6NV50PJDPMD9V8EVV1WPZSC","kafka-patterns",null,"Topic design, partition strategies, consumer group patterns, exactly-once processing, and dead letter queue handling.","rubicanjr\u002FFinCognis","rubicanjr","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F234912519?v=4","01M6NT156NND8J474G34SB3923","Rubi","01M6NT15B70RWXE1N3YV0BZY8A",0,"MIT","https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis\u002Fblob\u002Fmain\u002Fskills\u002Fkafka-patterns\u002Fskill.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32],"kafka","patterns","kafka patterns","design","partition","queue","strategies","processing","letter","2026-11-10 10:12:30",false,"---\nname: kafka-patterns\ndescription: Topic design, partition strategies, consumer group patterns, exactly-once processing, and dead letter queue handling.\n---\n\n# Kafka Patterns\n\nEvent streaming patterns for Apache Kafka in distributed systems.\n\n## Topic Design\n\n```yaml\n# Topic naming convention: \u003Cdomain>.\u003Centity>.\u003Cevent-type>\n# Examples:\n#   orders.order.created\n#   payments.payment.completed\n#   inventory.stock.updated\n\n# Topic configuration\ntopics:\n  orders.order.created:\n    partitions: 12          # Match expected consumer parallelism\n    replication-factor: 3   # Survive 2 broker failures\n    retention.ms: 604800000 # 7 days\n    cleanup.policy: delete\n\n  orders.order.changelog:\n    partitions: 12\n    replication-factor: 3\n    retention.ms: -1        # Infinite retention (compacted)\n    cleanup.policy: compact # Keep latest value per key\n    min.compaction.lag.ms: 3600000  # 1h before compacting\n```\n\n## Producer Patterns\n\n```typescript\nimport { Kafka, Partitioners, CompressionTypes } from 'kafkajs'\n\nconst kafka = new Kafka({\n  clientId: 'order-service',\n  brokers: process.env.KAFKA_BROKERS!.split(','),\n})\n\nconst producer = kafka.producer({\n  idempotent: true,                                    \u002F\u002F Exactly-once producer\n  maxInFlightRequests: 5,                              \u002F\u002F Max parallel requests\n  createPartitioner: Partitioners.DefaultPartitioner,\n})\n\nawait producer.connect()\n\n\u002F\u002F Key-based partitioning: same key always goes to same partition (ordering)\nasync function publishOrderEvent(order: Order, eventType: string): Promise\u003Cvoid> {\n  await producer.send({\n    topic: `orders.order.${eventType}`,\n    compression: CompressionTypes.LZ4,\n    messages: [{\n      key: order.id,                    \u002F\u002F Orders for same ID → same partition → ordered\n      value: JSON.stringify({\n        eventId: crypto.randomUUID(),   \u002F\u002F Idempotency key\n        eventType,\n        timestamp: new Date().toISOString(),\n        data: order,\n      }),\n      headers: {\n        'content-type': 'application\u002Fjson',\n        'source': 'order-service',\n        'correlation-id': order.correlationId,\n      },\n    }],\n  })\n}\n\n\u002F\u002F Batch publishing for throughput\nasync function publishBatch(events: OrderEvent[]): Promise\u003Cvoid> {\n  await producer.sendBatch({\n    topicMessages: [{\n      topic: 'orders.order.created',\n      messages: events.map(e => ({\n        key: e.orderId,\n        value: JSON.stringify(e),\n      })),\n    }],\n  })\n}\n```\n\n## Consumer Group Patterns\n\n```typescript\nconst consumer = kafka.consumer({\n  groupId: 'payment-processor',     \u002F\u002F Consumer group: shared topic consumption\n  sessionTimeout: 30000,\n  heartbeatInterval: 3000,\n  maxBytesPerPartition: 1048576,    \u002F\u002F 1MB per partition per fetch\n  retry: { retries: 5 },\n})\n\nawait consumer.connect()\nawait consumer.subscribe({\n  topics: ['orders.order.created'],\n  fromBeginning: false,              \u002F\u002F Start from latest offset\n})\n\nawait consumer.run({\n  autoCommit: false,                 \u002F\u002F Manual commit for exactly-once\n  eachBatchAutoResolve: false,\n\n  eachBatch: async ({ batch, resolveOffset, commitOffsetsIfNecessary, heartbeat }) => {\n    for (const message of batch.messages) {\n      try {\n        const event = JSON.parse(message.value!.toString())\n\n        \u002F\u002F Idempotency check: skip already processed events\n        if (await isAlreadyProcessed(event.eventId)) {\n          resolveOffset(message.offset)\n          continue\n        }\n\n        await processOrderPayment(event.data)\n        await markAsProcessed(event.eventId)\n\n        resolveOffset(message.offset)\n        await commitOffsetsIfNecessary()\n        await heartbeat()\n      } catch (err) {\n        console.error(`Failed to process message at offset ${message.offset}:`, err)\n        \u002F\u002F Send to DLQ instead of blocking the partition\n        await sendToDeadLetterQueue(message, err as Error)\n        resolveOffset(message.offset)\n      }\n    }\n  },\n})\n```\n\n## Dead Letter Queue (DLQ)\n\n```typescript\nconst DLQ_TOPIC = 'orders.order.created.dlq'\n\nasync function sendToDeadLetterQueue(\n  originalMessage: KafkaMessage,\n  error: Error\n): Promise\u003Cvoid> {\n  await producer.send({\n    topic: DLQ_TOPIC,\n    messages: [{\n      key: originalMessage.key,\n      value: originalMessage.value,\n      headers: {\n        ...originalMessage.headers,\n        'dlq-reason': error.message,\n        'dlq-timestamp': new Date().toISOString(),\n        'dlq-original-topic': 'orders.order.created',\n        'dlq-retry-count': '0',\n      },\n    }],\n  })\n}\n\n\u002F\u002F DLQ consumer: retry or alert\nasync function processDLQ(): Promise\u003Cvoid> {\n  const dlqConsumer = kafka.consumer({ groupId: 'dlq-processor' })\n  await dlqConsumer.subscribe({ topics: [DLQ_TOPIC] })\n\n  await dlqConsumer.run({\n    eachMessage: async ({ message }) => {\n      const retryCount = parseInt(\n        message.headers?.['dlq-retry-count']?.toString() ?? '0'\n      )\n\n      if (retryCount >= 3) {\n        \u002F\u002F Max retries exceeded: alert ops team\n        await alertOps({\n          topic: DLQ_TOPIC,\n          key: message.key?.toString(),\n          reason: message.headers?.['dlq-reason']?.toString(),\n          retries: retryCount,\n        })\n        return\n      }\n\n      \u002F\u002F Retry with incremented count\n      try {\n        const event = JSON.parse(message.value!.toString())\n        await processOrderPayment(event.data)\n      } catch (err) {\n        \u002F\u002F Re-enqueue with incremented retry count\n        await producer.send({\n          topic: DLQ_TOPIC,\n          messages: [{\n            key: message.key,\n            value: message.value,\n            headers: {\n              ...message.headers,\n              'dlq-retry-count': String(retryCount + 1),\n            },\n          }],\n        })\n      }\n    },\n  })\n}\n```\n\n## Partition Strategy\n\n```typescript\n\u002F\u002F Custom partitioner: route by region for data locality\nconst regionalPartitioner = () => ({\n  partition: ({ topic, partitionMetadata, message }) => {\n    const region = message.headers?.['region']?.toString() ?? 'default'\n    const regionMap: Record\u003Cstring, number> = {\n      'us-east': 0, 'us-west': 1,\n      'eu-west': 2, 'eu-east': 3,\n      'ap-southeast': 4,\n    }\n    const partition = regionMap[region]\n    if (partition !== undefined && partition \u003C partitionMetadata.length) {\n      return partition\n    }\n    \u002F\u002F Fallback: hash the key\n    const numPartitions = partitionMetadata.length\n    const hash = murmurHash(message.key?.toString() ?? '')\n    return Math.abs(hash) % numPartitions\n  }\n})\n```\n\n## Checklist\n\n- [ ] Idempotent producer enabled (exactly-once semantics)\n- [ ] Key-based partitioning for ordered processing per entity\n- [ ] Manual offset commit (not auto-commit) for at-least-once guarantee\n- [ ] Dead Letter Queue for failed messages (max 3 retries then alert)\n- [ ] Consumer idempotency check before processing (eventId dedup)\n- [ ] Heartbeat during long-running batch processing\n- [ ] Replication factor >= 3 for production topics\n- [ ] Monitoring: consumer lag, throughput, error rate per consumer group\n\n## Anti-Patterns\n\n- Auto-commit offsets: message loss if consumer crashes before processing\n- Single partition topics: no parallelism, bottleneck\n- Unbounded retry: infinite retry loop blocks partition processing\n- Large messages (>1MB): use claim-check pattern (store in S3, send reference)\n- Skipping idempotency: duplicate processing on consumer restart\n- Global ordering requirement: use single partition only when truly needed\n","# Kafka Patterns\n\nEvent streaming patterns for Apache Kafka in distributed systems.\n\n## Topic Design\n\n```yaml\n# Topic naming convention: \u003Cdomain>.\u003Centity>.\u003Cevent-type>\n# Examples:\n#   orders.order.created\n#   payments.payment.completed\n#   inventory.stock.updated\n\n# Topic configuration\ntopics:\n  orders.order.created:\n    partitions: 12          # Match expected consumer parallelism\n    replication-factor: 3   # Survive 2 broker failures\n    retention.ms: 604800000 # 7 days\n    cleanup.policy: delete\n\n  orders.order.changelog:\n    partitions: 12\n    replication-factor: 3\n    retention.ms: -1        # Infinite retention (compacted)\n    cleanup.policy: compact # Keep latest value per key\n    min.compaction.lag.ms: 3600000  # 1h before compacting\n```\n\n## Producer Patterns\n\n```typescript\nimport { Kafka, Partitioners, CompressionTypes } from 'kafkajs'\n\nconst kafka = new Kafka({\n  clientId: 'order-service',\n  brokers: process.env.KAFKA_BROKERS!.split(','),\n})\n\nconst producer = kafka.producer({\n  idempotent: true,                                    \u002F\u002F Exactly-once producer\n  maxInFlightRequests: 5,                              \u002F\u002F Max parallel requests\n  createPartitioner: Partitioners.DefaultPartitioner,\n})\n\nawait producer.connect()\n\n\u002F\u002F Key-based partitioning: same key always goes to same partition (ordering)\nasync function publishOrderEvent(order: Order, eventType: string): Promise\u003Cvoid> {\n  await producer.send({\n    topic: `orders.order.${eventType}`,\n    compression: CompressionTypes.LZ4,\n    messages: [{\n      key: order.id,                    \u002F\u002F Orders for same ID → same partition → ordered\n      value: JSON.stringify({\n        eventId: crypto.randomUUID(),   \u002F\u002F Idempotency key\n        eventType,\n        timestamp: new Date().toISOString(),\n        data: order,\n      }),\n      headers: {\n        'content-type': 'application\u002Fjson',\n        'source': 'order-service',\n        'correlation-id': order.correlationId,\n      },\n    }],\n  })\n}\n\n\u002F\u002F Batch publishing for throughput\nasync function publishBatch(events: OrderEvent[]): Promise\u003Cvoid> {\n  await producer.sendBatch({\n    topicMessages: [{\n      topic: 'orders.order.created',\n      messages: events.map(e => ({\n        key: e.orderId,\n        value: JSON.stringify(e),\n      })),\n    }],\n  })\n}\n```\n\n## Consumer Group Patterns\n\n```typescript\nconst consumer = kafka.consumer({\n  groupId: 'payment-processor',     \u002F\u002F Consumer group: shared topic consumption\n  sessionTimeout: 30000,\n  heartbeatInterval: 3000,\n  maxBytesPerPartition: 1048576,    \u002F\u002F 1MB per partition per fetch\n  retry: { retries: 5 },\n})\n\nawait consumer.connect()\nawait consumer.subscribe({\n  topics: ['orders.order.created'],\n  fromBeginning: false,              \u002F\u002F Start from latest offset\n})\n\nawait consumer.run({\n  autoCommit: false,                 \u002F\u002F Manual commit for exactly-once\n  eachBatchAutoResolve: false,\n\n  eachBatch: async ({ batch, resolveOffset, commitOffsetsIfNecessary, heartbeat }) => {\n    for (const message of batch.messages) {\n      try {\n        const event = JSON.parse(message.value!.toString())\n\n        \u002F\u002F Idempotency check: skip already processed events\n        if (await isAlreadyProcessed(event.eventId)) {\n          resolveOffset(message.offset)\n          continue\n        }\n\n        await processOrderPayment(event.data)\n        await markAsProcessed(event.eventId)\n\n        resolveOffset(message.offset)\n        await commitOffsetsIfNecessary()\n        await heartbeat()\n      } catch (err) {\n        console.error(`Failed to process message at offset ${message.offset}:`, err)\n        \u002F\u002F Send to DLQ instead of blocking the partition\n        await sendToDeadLetterQueue(message, err as Error)\n        resolveOffset(message.offset)\n      }\n    }\n  },\n})\n```\n\n## Dead Letter Queue (DLQ)\n\n```typescript\nconst DLQ_TOPIC = 'orders.order.created.dlq'\n\nasync function sendToDeadLetterQueue(\n  originalMessage: KafkaMessage,\n  error: Error\n): Promise\u003Cvoid> {\n  await producer.send({\n    topic: DLQ_TOPIC,\n    messages: [{\n      key: originalMessage.key,\n      value: originalMessage.value,\n      headers: {\n        ...originalMessage.headers,\n        'dlq-reason': error.message,\n        'dlq-timestamp': new Date().toISOString(),\n        'dlq-original-topic': 'orders.order.created',\n        'dlq-retry-count': '0',\n      },\n    }],\n  })\n}\n\n\u002F\u002F DLQ consumer: retry or alert\nasync function processDLQ(): Promise\u003Cvoid> {\n  const dlqConsumer = kafka.consumer({ groupId: 'dlq-processor' })\n  await dlqConsumer.subscribe({ topics: [DLQ_TOPIC] })\n\n  await dlqConsumer.run({\n    eachMessage: async ({ message }) => {\n      const retryCount = parseInt(\n        message.headers?.['dlq-retry-count']?.toString() ?? '0'\n      )\n\n      if (retryCount >= 3) {\n        \u002F\u002F Max retries exceeded: alert ops team\n        await alertOps({\n          topic: DLQ_TOPIC,\n          key: message.key?.toString(),\n          reason: message.headers?.['dlq-reason']?.toString(),\n          retries: retryCount,\n        })\n        return\n      }\n\n      \u002F\u002F Retry with incremented count\n      try {\n        const event = JSON.parse(message.value!.toString())\n        await processOrderPayment(event.data)\n      } catch (err) {\n        \u002F\u002F Re-enqueue with incremented retry count\n        await producer.send({\n          topic: DLQ_TOPIC,\n          messages: [{\n            key: message.key,\n            value: message.value,\n            headers: {\n              ...message.headers,\n              'dlq-retry-count': String(retryCount + 1),\n            },\n          }],\n        })\n      }\n    },\n  })\n}\n```\n\n## Partition Strategy\n\n```typescript\n\u002F\u002F Custom partitioner: route by region for data locality\nconst regionalPartitioner = () => ({\n  partition: ({ topic, partitionMetadata, message }) => {\n    const region = message.headers?.['region']?.toString() ?? 'default'\n    const regionMap: Record\u003Cstring, number> = {\n      'us-east': 0, 'us-west': 1,\n      'eu-west': 2, 'eu-east': 3,\n      'ap-southeast': 4,\n    }\n    const partition = regionMap[region]\n    if (partition !== undefined && partition \u003C partitionMetadata.length) {\n      return partition\n    }\n    \u002F\u002F Fallback: hash the key\n    const numPartitions = partitionMetadata.length\n    const hash = murmurHash(message.key?.toString() ?? '')\n    return Math.abs(hash) % numPartitions\n  }\n})\n```\n\n## Checklist\n\n- [ ] Idempotent producer enabled (exactly-once semantics)\n- [ ] Key-based partitioning for ordered processing per entity\n- [ ] Manual offset commit (not auto-commit) for at-least-once guarantee\n- [ ] Dead Letter Queue for failed messages (max 3 retries then alert)\n- [ ] Consumer idempotency check before processing (eventId dedup)\n- [ ] Heartbeat during long-running batch processing\n- [ ] Replication factor >= 3 for production topics\n- [ ] Monitoring: consumer lag, throughput, error rate per consumer group\n\n## Anti-Patterns\n\n- Auto-commit offsets: message loss if consumer crashes before processing\n- Single partition topics: no parallelism, bottleneck\n- Unbounded retry: infinite retry loop blocks partition processing\n- Large messages (>1MB): use claim-check pattern (store in S3, send reference)\n- Skipping idempotency: duplicate processing on consumer restart\n- Global ordering requirement: use single partition only when truly needed\n",{"name":5,"description":7},"main","70e1c350500ee750987420bbae48837afa906b7e","skills\u002Fkafka-patterns","https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis","https:\u002F\u002Fgithub.com\u002Frubicanjr","linktr.ee\u002Ffinanskodu","Industrial Engineer & CIO @FinansKodu. Architecting AI-driven financial agents and autonomous workflows. 🏗️ Building systems, not just prompts.","2026-06-09 13:50:15",{"source":8,"skillName":5,"commands":47,"prompt":57,"zipAvailable":58},[48,51,54],{"tool":49,"command":50},"npx","npx skills add rubicanjr\u002FFinCognis --skill kafka-patterns",{"tool":52,"command":53},"bunx","bunx skills add rubicanjr\u002FFinCognis --skill kafka-patterns",{"tool":55,"command":56},"pnpm","pnpm dlx skills add rubicanjr\u002FFinCognis --skill kafka-patterns","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis\u002Fblob\u002Fmain\u002Fskills\u002Fkafka-patterns\u002Fskill.md",true,[],[61,80,89,104,134,153],{"skillNo":62,"name":63,"nameZh":6,"description":64,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":65,"categories":66,"keywords":70,"publishedAt":33},"01M6NWS9DAXJTADT4T5MB49X8W","workflow-router","Goal-based workflow orchestration - routes tasks to specialist agents based on user goals","https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis\u002Fblob\u002Fmain\u002Fskills\u002Fworkflow-router\u002FSKILL.md",[67],{"categoryNo":68,"categoryName":69,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[71,72,73,74,75,76,77,78,79],"workflow router","workflow","router","orchestration","goals","goal","user","workflow orchestration","tasks",{"skillNo":81,"name":82,"nameZh":6,"description":83,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":84,"categories":85,"keywords":86,"publishedAt":33},"01M6NWS3RETSC0SHP16HP66E14","wiring","Wiring Verification","https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis\u002Fblob\u002Fmain\u002Fskills\u002Fwiring\u002FSKILL.md",[],[82,87,88],"verification","false",{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":96,"publishedAt":33},"01M6NWS0XW9CVQZBDA1EGW0TWC","websocket-patterns","Connection management, room patterns, reconnection strategies, message buffering, and binary protocol design.","https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis\u002Fblob\u002Fmain\u002Fskills\u002Fwebsocket-patterns\u002Fskill.md",[95],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[97,25,98,27,99,100,101,30,102,103],"websocket","websocket patterns","protocol","management","message","binary","connection",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":114,"publishedAt":33},"01M6NWRDQDX9ZNETAWRRMQWV52","visual-verdict","Screenshot comparison QA for frontend development. Takes a screenshot of the current implementation, scores it across multiple visual dimensions, and returns a structured PASS\u002FREVISE\u002FFAIL verdict with concrete fixes. Use when implementing UI from a design reference or verifying visual correctness.","https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis\u002Fblob\u002Fmain\u002Fskills\u002Fvisual-verdict\u002FSKILL.md",[110,113],{"categoryNo":111,"categoryName":112,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":68,"categoryName":69,"taxonomyType":21,"taxonomyTypeDesc":22},[115,116,117,118,119,120,121,122,123,124,125,126,127,27,128,129,130,131,132,133],"visual","verdict","visual verdict","ui","across","revise","comparison","correctness","implementing","for","fixes","dimensions","frontend","development","qa","screenshot","returns","use","frontend development",{"skillNo":135,"name":136,"nameZh":6,"description":137,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":138,"categories":139,"keywords":140,"publishedAt":33},"01M6NWR8HSNRS7MNDK2J02QYMN","verification-loop","Comprehensive verification system covering build, types, lint, tests, security, and diff review before a PR.","https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis\u002Fblob\u002Fmain\u002Fskills\u002Fverification-loop\u002FSKILL.md",[],[141,142,87,143,144,145,146,147,148,149,150,151,152],"verification loop","loop","lint","review","security","pr","system","diff","build","tests","diff review","types",{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":159,"publishedAt":33},"01M6NWR4HHSFR0VR5EXFRWA747","vector-db-patterns","Embedding strategies, ANN algorithms, hybrid search, RAG chunking strategies, and reranking for semantic search and retrieval.","https:\u002F\u002Fgithub.com\u002Frubicanjr\u002FFinCognis\u002Fblob\u002Fmain\u002Fskills\u002Fvector-db-patterns\u002Fskill.md",[],[160,161,162,163,25,164,165,166,167,30,168,169,170,171,172,124,173,174],"vector db patterns","vector db","db","vector","semantic search","search","embedding strategies","algorithms","chunking","semantic","retrieval","embedding","Hybrid Search","hybrid","rag"]