본관은 광산(光山). 자는 덕여(德汝), 호는 향포(香圃). 할아버지는 김상익(金相翊)이고, 아버지는 광은부위(光恩副尉) 김기성(金箕性)이며, 어머니는 장헌세자(莊獻世子)의 딸이다.
1801년(순조 1) 고양군수로 정시 문과에 병과로 급제, 부수찬(副修撰)이 되고 1806년 승지·대사성을 거쳐 1809년 경기도관찰사가 되었다. 관찰사 재직시 지평현의 서리 방복항(方福恒)이 1만여 석을 포흠하여 이에 대한 책임을 물어 영의정 김재찬(金載璨)의 파직을 주장하였다.
이해 한성부판윤을 거쳐 1811년 다시 대사성이 되었다. 1814년 형조판서·대사헌·지돈녕부사가 되었다가 1816년 판의금부사, 이듬해 공조판서를 거쳐 광주부유수로 좌천된 적도 있다. 1821년 병조판서, 1826년 형조판서·이조판서가 되고 1830년 원접사(遠接使)가 되었다가, 1835년(헌종 1) 병조판서가 되었다.
병조판서를 지내던 중, 정시 무과 초시의 시험날짜를 통지하지 못하여 지방무사들이 응시하지 못한 책임으로 한때 파면되기도 하였다. 1837년 이조판서로 복직되고, 1843년에는 판중추부사가 되었다. 편서로는 『광주부공도회과작(廣州府公都會科作)』이 있다. 시호는 정간(貞簡)이다.